2017-02-06 6 views
1

Я хочу обновить элемент в Dynamodb, чтобы я мог установить значение одного атрибута на основе значения существующего атрибута в этом элементе. Например: у меня есть таблица со следующим элементом {"id": 1, "valueone": 30}.Атрибут обновления Dynamodb на основе другого

Я хочу обновить этот пункт таким образом, что я могу добавить еще один атрибут valuetwo, значение которого в два раза превышает valueone: {"id": 1, "valueone": 30, "valuetwo": 60}

Что-то вроде этого, но не уверен, как представить valueone в ExpressionAttributeValues:

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

Я могу контролировать, является ли valuetwo новым атрибутом в элементе или уже существует с фиктивным значением (скажем, 0).

ответ

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 (Key = { 'идентификатор': 1}, UpdateExpression =" набор vtwo =: r ", ExpressionAttributeValues ​​= {': r': valueone * 2}, ReturnValues ​​=" ALL_NEW "))' – user2703829

Смежные вопросы