如何在PHP中使用dynamoDB查询获取Json嵌套属性值

时间:2017-03-14 11:56:45

标签: php amazon-dynamodb

[{
    "forms": [{
        "id": "52b55960-023e-11e7-9140-f3c1d163524b",
        "title": "Default Form",
        "update_history": [{
            "version": "1",
            "updated_at": "2016-12-10 12:12:10"
        }, {
            "version": "2",
            "updated_at": "2017-01-01 05:17:19"
        }, {
            "version": "3",
            "updated_at": "2017-02-07 03:22:39"
        }, {
            "version": "4",
            "updated_at": "2017-03-03 02:28:56"
        }, {
            "version": "5",
            "updated_at": "2017-01-11 07:01:22"
        }]
    }]
}]

我将上面的Json存储在Dynamo-DB表中。表单对象是父对象。我在update_history嵌套对象中存储了表单更新的详细版本和updated_at。我想要版本2的updated_at。请建议我,以下查询有什么问题。我得到了空洞的结果。

`$response = $client->scan([
       'TableName' => 'TableName',
       'ProjectionExpression' => 'Json.forms.update_history.updated_at',
                    'ExpressionAttributeValues' => [
                            ':val1' => ['S' => '52b55960-023e-11e7-9140-f3c1d163524b'],
                            ':val2' => ['S' => '2']
                            ],
                    'FilterExpression' => 'id = :val1 and Json.forms.update_history.version = :val2',
        ]);` 

1 个答案:

答案 0 :(得分:1)

请参阅以下链接中的DocumentPath示例,并尝试使用 deference operator

  

对于嵌套属性,使用构造文档路径   解除引用运算符。

如果您不知道deference运算符(即index),则无法按照您的尝试过滤数据。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html#DocumentPaths

示例: -

访问列表元素: -

MyList[0]
AnotherList[12]
ThisList[5][11]

访问地图元素: -

MyMap.nestedField
MyMap.nestedField.deeplyNestedField

您拥有地图和列表的组合,因此您需要FilterExpression