Amazon dynamodb UpdateItem超过最大值的条件表达式

Amazon dynamodb UpdateItem超过最大值的条件表达式,amazon-dynamodb,Amazon Dynamodb,我的updateItem调用中有一个条件超过了定义的最大值。当我运行这个时,我的值最终将为101。是否有办法确保条件表达式检查更新的最终值,以防止其超过100?注意,在我的测试中,我增加了1,但最终我将增加任意值 $query = array( 'TableName' => $this->table_name, 'Key' => $this->get_query_key($obj), 'ConditionExpres

我的updateItem调用中有一个条件超过了定义的最大值。当我运行这个时,我的值最终将为101。是否有办法确保条件表达式检查更新的最终值,以防止其超过100?注意,在我的测试中,我增加了1,但最终我将增加任意值

$query = array(
  'TableName'         => $this->table_name,
  'Key'               => $this->get_query_key($obj),
  'ConditionExpression'   => 'num_completed <= :max',
  'UpdateExpression'      => 'SET num_completed = num_completed + :num',
  'ExpressionAttributeValues' => array(
    ':num' => array('N' => 1),
    ':max' => array('N' => 100)
  )
  //'ReturnConsumedCapacity' => 'TOTAL'
);
try {
  $this->dynamo_db->updateItem($query);
}
$query=array(
“TableName”=>$this->table\u name,
'Key'=>this->get_query_Key($obj),

“ConditionExpression'=>”num_completedDDB在更新操作之前计算条件表达式。也就是说,您不应该依赖更新表达式的“final”值(即使它是原子计数器)

一个非常简单的解决方法是编写一个丰富的条件表达式,例如从
:max
中减去
:num
,如下所示:

...
'ConditionExpression'   => 'num_completed <= (:max - :num)',
'UpdateExpression'      => 'SET num_completed = num_completed + :num',
...
。。。

“ConditionExpression'=>”num_completed您是否针对实际的DynamoDB服务或DynamoDB local进行了测试?这不是问题所在。@MikeKobit然后我认为文档有误导性,如果没有错的话。我将向他们提交一份票据。谢谢!