如何使用FilterExpression为PHP中的DynamoDB Query中的嵌套Json attribues应用SCAN查询

时间:2017-03-21 12:06:11

标签: amazon-dynamodb

[{
    "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数据。请建议我查询相同的内容。

1 个答案:

答案 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'
    }