gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:56:19 29 4
gpt4 key购买 nike

我有一个存储文档的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com