2017-02-06 34 views
1

我想更新Dynamodb中的項目,以便可以根據該項目中現有屬性的值設置一個屬性的值。例如:我有以下項目{"id": 1, "valueone": 30}的表格。基於另一個的Dynamodb更新屬性

我想更新這個項目,這樣我可以添加另一個屬性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

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

有沒有辦法做這樣的事情來解決這個約束:'table.update_item(密鑰= { '身份證':1},UpdateExpression =「設置VTWO =:r「,ExpressionAttributeValues = {':r':valueone * 2},ReturnValues =」ALL_NEW「))' – user2703829