如何在查询DynamoDB时筛选嵌套数组对象字段?
DynamoDB数组嵌套字段筛选正确方法
你的DynamoDB条目结构
{ "taxAmounts": [ { "amount": { "currency": "AUD", "value": 209 }, "name": "GST" } ] }
你尝试的错误命令
--filter-expression "contains (taxAmounts.#name, :gst)" --expression-attribute-values '{"gst":{"M": { "name": {"S": "GST"}}}}' -expression-attribute-names '{"#name": "name"}'
错误原因
- 路径指向错误:
taxAmounts.#name试图访问数组对象本身的name属性,而非数组内部每个元素的name字段,需要用taxAmounts[*].name遍历数组所有元素的对应属性。 - 属性值格式错误:无需嵌套
M(Map)结构,直接传入字符串类型的S值即可,因为你要匹配的是字符串"GST"。
正确筛选命令
方法一:使用contains结合数组遍历路径
aws dynamodb scan \ --table-name 你的表名称 \ --filter-expression "contains(taxAmounts[*].name, :gst)" \ --expression-attribute-values '{":gst": {"S": "GST"}}'
方法二:使用ANY语法(更直观)
aws dynamodb scan \ --table-name 你的表名称 \ --filter-expression "ANY taxAmounts.name = :gst" \ --expression-attribute-values '{":gst": {"S": "GST"}}'
这两种方式都能筛选出taxAmounts数组中存在元素name为"GST"的条目。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

