首页 > 解决方案 > 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

我的问题有意义吗?请让我知道你的想法。

标签: amazon-dynamodbboto3dynamodb-queries

解决方案


我的直觉告诉我这是一个次优设计。触发我的是你说它可以是一个不断增长的地图,但是单个记录对单个项目有 400KB 的限制。如果您经常更改数据,我会尝试将项目展平并避免深度嵌套。

你能重新设计,所以每个项目都是它自己的问题。如果这是您的目标,还有其他方法可以实现多租户。


推荐阅读