JDi*_*rro 6 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"
}
}
Run Code Online (Sandbox Code Playgroud)
该表有一个由 Terraform 管理的全局二级索引,定义如下:
global_secondary_index {
name = "display_name_index"
hash_key = "display_name"
projection_type = "INCLUDE"
non_key_attributes = [
"updated_at",
"info.email",
"created_at"
]
}
Run Code Online (Sandbox Code Playgroud)
但是,当我查询表时,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
}
Run Code Online (Sandbox Code Playgroud)
如果我更改non_key_attributes为包含info它返回完整的信息 blob 就好了,我可以使用 a projection-expressionofinfo.email来检索该字段就好了:
{
"Count": 1,
"Items": [
{
"info": {
"M": {
"email": {
"S": "person@example.com"
}
}
}
}
],
"ScannedCount": 1,
"ConsumedCapacity": null
}
Run Code Online (Sandbox Code Playgroud)
Dynamo 文档确实指定索引键必须是顶级的,但他们没有提到必须是顶级的投影中的非键属性。因此,我认为在投影表达式中工作的任何东西都应该在索引投影中工作,但情况似乎并非如此?
我对这个索引定义或查询做错了吗?或者 Dynamo 只是不支持嵌套的非键属性作为索引投影的一部分?
小智 0
我也遇到了同样的事情。我发现您的问题没有答案。不确定我有正确的答案,但也许它可以帮助你。
首先,我认为创建 GSI 非常奇怪,API 允许您添加“info.email”的投影(这也将在索引概述页面上可见),但永远无法再次检索。
我发现在创建 GSI 时,您会卡在所提供的属性上。另一方面,创建 LSI 时,您可以使用创建 LSI 时提供的属性。
您可以在本文档中找到一些相关信息(搜索“投影属性”): https: //docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/SecondaryIndexes.html
我希望你能利用这些信息做点什么。
| 归档时间: |
|
| 查看次数: |
789 次 |
| 最近记录: |