具有ReturnValues参数的DynamoDB UpdateItem在失败的ConditionExpression上不返回任何内容

时间:2017-02-06 23:01:02

标签: amazon-dynamodb

使用aws / aws-sdk-php 3.21.6。当ConditionExpression遇到ConditionalCheckFailedException错误时,我必须误解ReturnValues的工作原理。

我希望如果ConditionExpression失败,这又会触发ConditionalCheckFailedException,我可以捕获此异常,然后通过ReturnValues访问DD中的新属性。

文档Attributes I'm expecting from ReturnValues似乎暗示了这一点。

但是,从测试开始,如果ConditionExpression为true,则ReturnValues仅返回Attributes,而不是在失败时返回。

$response = $client->updateItem([
    'TableName' => 'MyTable',
    'Key' => [
        'customer_url' => [
            'S' => 'someurl.com'
        ],
        'customer_platform' => [
            'S' => 'some_platform'
        ]
    ],
    'ExpressionAttributeNames' => [
        '#C' => 'createdAt'
    ],
    'ExpressionAttributeValues' =>  [
        ':val1' => [
            'S' => '2017-01-24T14:15:32'
        ],
        ':val2' => [
            'S' => '2017-01-24T14:15:30'
        ]
    ],
    'UpdateExpression' => 'set #C = :val1',
    'ConditionExpression' => '#C = :val2', // :val2 originally was 2017-01-24T14:15:30, before attempting to update to 2017-01-24T14:15:32. If I change the field to 2017-01-24T14:15:31, before running this update it will throw the ConditionalCheckFailedException
    'ReturnValues' => 'ALL_NEW'
]);

1 个答案:

答案 0 :(得分:1)

是的,如果ReturnValues成功,则updateItem仅填充 。如果失败,由于ConditionalCheckFailedException或任何其他原因,ReturnValues将为空。

来自here的支持文档,强调我的

  

如果您想要获取更新之前或之后出现的商品属性,请使用ReturnValues。