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

时间:2015-04-15 22:40:19

标签: amazon-dynamodb

我的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);
}

1 个答案:

答案 0 :(得分:0)

DDB在更新操作之前评估条件表达式。也就是说,你不应该依赖&#34; final&#34;更新表达式的值(即使它是原子计数器)。

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

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

这对您的案件有意义吗?