【问题标题】:Dynamodb update attribute based on anotherDynamodb 更新属性基于另一个
【发布时间】:2017-04-02 00:28:51
【问题描述】:

我想更新 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 是项目中的一个新属性还是已经存在一个虚拟值(比如零)。

【问题讨论】:

  • 你是如何在 aws cli 中实现的?

标签: amazon-dynamodb updates


【解决方案1】:

目前,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
}

【讨论】:

  • 有没有办法通过这样做来绕过这个约束:table.update_item(Key={'id': 1}, UpdateExpression="set vtwo = :r", ExpressionAttributeValues={':r': valueone *2},ReturnValues="ALL_NEW"))
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 2014-04-19
  • 2016-07-21
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多