amazon-dynamodb - DynamoDB 查询嵌套属性以动态更改地图对象
问题描述
假设我在 DynamoDB 上有以下对象。此对象是地图的地图,其中每个嵌套地图代表一个问题。嵌套映射的键值对代表issueId : issueDetails。现在假设有 100 个问题(不断增长或减少),我只想抓住每个问题的状态和严重性。我该怎么做呢?
{
"issues": {
"ISU000000000": {
"impactOn": "Balance Sheets",
"issueName": "TestIssue",
"criticality": "High",
"status": "open"
},
"ISU000000001": {
"impactOn": "Balance Sheets",
"issueName": "TestIssue",
"criticality": "High",
"status": "open"
},
"ISU000000002": {
"impactOn": "Balance Sheets",
"issueName": "TestIssue",
"criticality": "High",
"status": "open"
}
}
}
我知道您可以在 DynamoDB 上使用如下属性名称和值编写投影表达式:
ProjectionExpression = "issues.#IssueID.criticality, issues.#IssueID.status"
ExpressionAttributeNames = {'#IssueID':'ISU000000000'}
但问题是,在这种方法中,我在 ExpressionAttributeNames 参数中声明了IssueID 。这意味着,使用这种方法,我必须事先声明所有 IssueID。有没有办法编写一个表达式,这样我就不必声明 issueID?最终目标是能够在大小动态变化的对象中获取上述所需信息(意味着将添加或删除问题)。
注意,我使用的是 Boto3 SDK
我的问题有意义吗?请让我知道你的想法。
解决方案
我的直觉告诉我这是一个次优设计。触发我的是你说它可以是一个不断增长的地图,但是单个记录对单个项目有 400KB 的限制。如果您经常更改数据,我会尝试将项目展平并避免深度嵌套。
你能重新设计,所以每个项目都是它自己的问题。如果这是您的目标,还有其他方法可以实现多租户。
推荐阅读
- javascript - 苗条的复选框突然无法检查
- html - 通过外部和自定义工具栏设置 videojs 音量
- r - 在列中选择多个字符值以将它们替换为相同的值
- java - 为什么在 JUnit 中测试代码时创建嵌入式 Derby DB 有效,但从 main 方法调用时无效?
- c++ - 如何从 C++ 中的二维向量类型指针访问单个元素
- python - Trying to store a GET Requests to a DataFrame in Pandas, but getting the following error
- laravel - 部署后在 Laravel 网站中导航时找不到 404 请求(路由不起作用)
- mql4 - 在 mql4 中计算账户总盈亏的正确方法?
- python - Python:避免使用会使其他程序崩溃的文件名
- php - 如何使用 Lumen 8.x 获取中间件中的当前路由信息?