当前位置: 首页 > 知识库问答 >
问题:

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

贲俊才
2023-03-14

使用aws/aws-sdk-php 3.21.6。我一定是误解了当条件表达式遇到条件检查失败异常错误时返回值是如何工作的。

我希望的是,如果ConditionExpression失败,进而触发ConditionalCheckFailedException,我可以捕获这个异常,然后通过ReturnValue从DD访问新属性。

我期望ReturnValue中的docs属性似乎暗示了这一点。

然而,通过测试,ReturnValues仅在ConditionExpression为true时返回属性,而不是在它失败时返回属性。

$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个答案

穆商震
2023-03-14

是的,只有当updateItem成功时,返回才会被填充。如果失败,由于条件检查失败异常或任何其他原因,返回值将为null。

从这里支持留档,重点是我的:

如果要获取更新之前或之后显示的项目属性,请使用ReturnValue。

 类似资料:
  • 问题内容: JDK中是否有一个标准的功能接口,该接口什么都不做,什么也不返回?我找不到一个。类似于以下内容: 问题答案: 那么Runnable呢:

  • 我必须写一个方法来找到最小的n,使得小于n的自然数之和超过k。但是,当我尝试测试该方法时,它不会返回任何值。 我尝试这样调用,在main方法中:

  • 问题内容: 尽管我看到了很多类似问题的答案,但我无法使以下代码正常工作: 我希望在C:\ User \ user_id下获得所有“ somefile.xml”的路径列表,以及该路径下的所有子目录。但是hasNext()方法每次都返回false。 问题答案: 仅迭代您提供的目录并匹配该目录中的条目。它 不在 任何子目录中查找。 您需要使用walkXXXX方法之一来查看所有目录。例如:

  • 我想用编写一个函数。我正在使用PostgresEnterprise Manager v3并使用shell来创建一个函数,但是在shell中我必须定义返回类型。如果我不定义返回类型,我就无法创建函数。 如何创建没有返回结果的函数,即创建新表的函数?

  • 我有一个像这样的mysql表 但是我无法用这个函数检索“成人”和“儿童”的值 错误日志显示变量被正确地传递给函数: 为什么此函数返回?

  • 问题内容: 带有一个简单的滤波器,可以在0-100范围内测试输入。 如果,则不返回任何内容。但是,实际上可以“不”返回任何东西吗?还是函数必须返回某些东西? 问题答案: 函数总是返回某些东西(至少在执行过程中没有到达返回语句并且到达函数的结尾时)。 另一种情况是它们被异常中断。在这种情况下,异常处理将“在堆栈上占主导”,您将返回适当的状态或得到一些讨厌的错误:) 关于您的问题,我必须说有两种可能性