[{
"forms": [{
"id": "f1",
"title": "Form1",
"update_history": [{
"version": "A",
"updated_at": "2016-12-10 12:12:10"
}, {
"version": "B",
"updated_at": "2017-01-01 05:17:19"
}, {
"version": "C",
"updated_at": "2017-02-07 03:22:39"
}]
},{
"id": "f2",
"title": "Form2",
"update_history": [{
"version": "B",
"updated_at": "2016-12-10 12:12:10"
}, {
"version": "C",
"updated_at": "2017-01-01 05:17:19"
}, {
"version": "D",
"updated_at": "2017-02-07 03:22:39"
}]
},{
"id": "f3",
"title": "Form13",
"update_history": [{
"version": "A",
"updated_at": "2016-12-10 12:12:10"
}, {
"version": "E",
"updated_at": "2017-01-01 05:17:19"
}, {
"version": "F",
"updated_at": "2017-02-07 03:22:39"
}]
}]
}]
我将以上数据存储在Dynamo-DB表中。表单对象是父对象。 update_history嵌套对象中有3个列表数据。我想要所有具有版本A的List数据。请建议我查询相同的内容。
答案 0 :(得分:1)
update_history
是一个List数据类型,其上包含Map对象。这基本上是DynamoDB数据模型上的复杂结构。
假设version A
将始终是列表中的第一个匹配项,下面的FilterExpression
应该有效。如果此假设不成立,则FilterExpression将无效。
这是上述数据模型唯一可用的选项。如果您可以重新设计只有Map或List数据类型,那么我们可以考虑替代解决方案。
以下代码适用于JavaScript: -
您可以将其转换为PHP代码。 AWS SDK API概念在所有语言中都是相同的。
FilterExpression : 'update_history[0].version = :versionVal',
ExpressionAttributeValues : {
':versionVal' : 'A'
}