无法更新DynamoDB表的映射列

时间:2017-03-14 21:31:22

标签: php amazon-dynamodb aws-sdk alexa-skills-kit

我目前正在为亚马逊的回声点开发一项需要使用持久数据的技能。在为我的技能开发Web界面时遇到了一个问题,我无法轻松更新技能使用的DynamoDB表的mapAttr列。

过去两天我一直试图解决这个问题,我到处寻找包括文档在内,但似乎找不到任何对我有用的东西。

这是我正在使用的代码:

        $result = $client->updateItem([
            'TableName' => 'rememberThisDBNemo',
            'Key' => [
                'userId' => [ 'S' => $_SESSION['userDataAsk'] ]
            ],
            'ExpressionAttributeNames' => [
                '#attr' => 'mapAttr.ReminderJSON'
            ],
            'ExpressionAttributeValues' => [
                ':val1' => json_encode($value)
            ],
            'UpdateExpression' => 'SET #attr = :val1'
        ]);

我尝试过很多不同的东西,所以这可能是完全错误的,但我发现的一切都没有用。

该表包含 2列 userId mapAttr ,userId是字符串,mapAttr是地图。最初我以为它只是一个JSON字符串,但它不是那样的,因为当我尝试用JSON字符串直接更新它时,它会在Alexa读取时停止工作。

我只是尝试更新mapAttr的2个属性中的1个。那是ReminderJSON,这是一个字符串。

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

尝试像这样调用updateItem

 show create view test_view;

但是,请注意,要使其正常工作,属性mapAttr必须已存在。如果没有,您将获得ValidationException $result = $client->updateItem([ 'TableName' => 'rememberThisDBNemo', 'Key' => [ 'userId' => [ 'S' => $_SESSION['userDataAsk'] ] ], 'ExpressionAttributeNames' => [ '#mapAttr' => 'mapAttr', '#attr' => 'ReminderJSON' ], 'ExpressionAttributeValues' => [ ':val1' => ['S' => json_encode($value)] ], 'UpdateExpression' => 'SET #mapAttr.#attr = :val1' ]);

作为一种变通方法,您可能希望在params中添加The document path provided in the update expression is invalid for update...,捕获可能的异常,然后执行另一个更新,添加新属性mapAttr:

ConditionExpression => 'attribute_exists(mapAttr)'