amazon-dynamodb - 在 DynamoDB GSI 的投影中使用嵌套字段

标签 amazon-dynamodb dynamodb-queries

我有一个存储文档的 Dynamo 表,如下所示:

{
  "guid": "<some UUID>"
  "created_at": 1550778260030,
  "display_name": "person",
  "updated_at": 1550778260030,
  "info": {
    "locked": false,
    "confirmed": true,
    "deactivated": false,
    "email": "person@example.com"
  }
}

该表有一个由 Terraform 管理的全局二级索引,定义如下:
    global_secondary_index {
        name = "display_name_index"

        hash_key = "display_name"

        projection_type = "INCLUDE"
        non_key_attributes = [
            "updated_at",
            "info.email",
            "created_at"
        ]
    }

但是,当我查询表时 info.email字段未返回:
aws dynamodb query \
  --table-name "accounts" \
  --index-name "display_name_index" \
  --key-condition-expression "display_name = :display_name" \
  --expression-attribute-values '{":display_name":{"S":"person"}}'
{
    "Count": 1,
    "Items": [
        {
            "created_at": {
                "N": "1550778260030"
            },
            "display_name": {
                "S": "person"
            }
            "updated_at": {
                "N": "1550778260030"
            }
        }
    ],
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

如果我更改 non_key_attributes包括 info它返回完整的信息 blob 就好了,我可以使用 projection-expressioninfo.email检索该字段就好了:
{
    "Count": 1,
    "Items": [
        {
            "info": {
                "M": {
                    "email": {
                        "S": "person@example.com"
                    }
                }
            }
        }
    ],
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

Dynamo 文档确实指定索引键必须是顶级的,但他们没有提到必须是顶级的投影中的非键属性。因此,我假设在投影表达式中工作的任何东西都应该在索引投影中工作,但情况似乎并非如此?

我对这个索引定义或查询做错了吗?或者 Dynamo 只是不支持嵌套的非键属性作为索引投影的一部分?

最佳答案

我走进了同样的事情。我看到您的问题没有答案。不确定我有正确的答案,但也许它可以帮助你。
首先,我认为创建 GSI 非常奇怪,API 允许您添加“info.email”的投影(这也将在索引概述页面上可见),但永远无法再次检索。
我发现在创建 GSI 时,您被困在您提供的属性上。
另一方面,创建 LSI 时,您可以使用创建 LSI 时提供的属性。
您可以在本文档中找到一些关于此的信息(搜索“投影属性”):
https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/SecondaryIndexes.html
我希望你能用这些信息做点什么。

关于amazon-dynamodb - 在 DynamoDB GSI 的投影中使用嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931984/

相关文章:

amazon-web-services - DynamoDB getItem - 当项目为 N 时,预期项目为 S

java - DynamoDBMapper : Query/Scan with a filter on nested object attribute

concurrency - DynamoDB 自动更新计数器

java - 有什么方法可以限制 DynamoDb 中自动生成的 hashKey 的长度

java - 根据 GSI 索引和范围键从 Dynamo 数据库获取所有列

mysql - 将数据从 MySQL 复制到 Amazon DynamoDB

amazon-web-services - 如何优化我的 DynamoDB 表二级全局索引,以便记录均匀分布,同时仍保持所有记录可排序?

amazon-web-services - DynamoDb - 吞吐量限制到底如何运作?

amazon-web-services - 用于工单管理系统的 dynamo db 中的数据建模

Golang 根据属性获取项目 手机 dynamodb