【发布时间】:2019-02-28 18:24:22
【问题描述】:
我有一个 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,我可以使用info.email 的projection-expression 来很好地检索该字段:
{
"Count": 1,
"Items": [
{
"info": {
"M": {
"email": {
"S": "person@example.com"
}
}
}
}
],
"ScannedCount": 1,
"ConsumedCapacity": null
}
Dynamo 文档确实指定索引键必须是顶级的,但他们没有提到投影中的非键属性必须是顶级的。因此,我假设在投影表达式中起作用的任何东西都应该在索引投影中起作用,但似乎并非如此?
我的索引定义或查询有问题吗?还是 Dynamo 只是不支持将嵌套的非键属性作为索引投影的一部分?
【问题讨论】:
标签: amazon-dynamodb dynamodb-queries