Dynamodb更新属性基于另一个

时间:2017-02-06 22:10:41

标签: amazon-dynamodb updates

我想更新Dynamodb中的项目,以便我可以根据该项目中现有属性的值设置一个属性的值。例如:我的表格包含以下项目{"id": 1, "valueone": 30}

我想更新此项目,以便我可以添加另一个属性valuetwo,其值是valueone的两倍:{"id": 1, "valueone": 30, "valuetwo": 60}

像这样,但不确定如何在ExpressionAttributeValues中表示valueone

table.update_item(Key={'id': 1}, UpdateExpression="set vtwo = :two * :r", ExpressionAttributeValues={':r': valueone, ':two': 2},ReturnValues="ALL_NEW"))

我可以控制valuetwo是否是项目中的新属性,或者是否已存在虚拟值(例如零)。

1 个答案:

答案 0 :(得分:2)

目前,DynamoDB不支持" * - UpdateExpression中的乘法(或)/ - 除法" 算术运算符。

它仅支持加法(+)和减法( - )运算符。

<强>增加: -

UpdateExpression : "SET total_new_val = total_val + :value",

<强>减法: -

UpdateExpression : "SET total_new_val = total_val - :value",

<强>乘法: -

UpdateExpression : "SET total_new_val = total_val * :value",    

乘法会引发以下错误: -

Unable to update item. Error JSON: {
  "message": "Invalid UpdateExpression: Syntax error; token: \"*\", near: \"tota
l_val * :value\"",
  "code": "ValidationException",
  "time": "2017-02-07T11:32:41.478Z",
  "requestId": "64f36024-7251-40af-98ee-e9cef854e94b",
  "statusCode": 400,
  "retryable": false,
  "retryDelay": 0
}