Условное обновление в Амазоне локального динамодба
Я поместил следующий объект в локальную базу данных Dynamo.
class LicenseEntitilement {
String featureName; // Primary key
int EntitilementCount;
int UsageCount;
}
Мне нужно сделать условное обновление со следующим выражением -
Условное выражение: (UsageCount + askCount) (Значения UsageCount и EntitlementCount находятся в БД, а askCount - локальная переменная.) Выражение обновления: UsageCount = UsageCount + askCount Выдает исключение, что "+" не допускается в условном выражении. Есть ли способ добиться этого условного обновления?
1 ответ
Вот определение ConditionExpression
,
Условие, которое должно быть выполнено для успешного выполнения условного обновления.
Посмотрите на приведенное ниже условное выражение. Изначально элемент в таблице имеет следующие значения:
UsageCount
= 1
EntitilementCount
= 5
Локальная переменная: askedCount
= 1 (т.е. увеличить значение на 1)
var params = {
TableName: "tableName",
Key: {
"ID": '3'
},
UpdateExpression: "SET UsageCount = UsageCount + :askedCount",
ConditionExpression : "UsageCount < EntitilementCount",
ExpressionAttributeValues: {
":askedCount": askedCount,
},
ReturnValues: "UPDATED_NEW"
};
Я выполнил программу 4 раза успешно. В пятый раз у меня есть The conditional request failed
сообщение об ошибке. Это удовлетворяет вашим требованиям.
prompt>node updateitem_stock_conditionally.js
Updating the item...
UpdateItem succeeded: {"Attributes":{"UsageCount":2}}
prompt>node updateitem_stock_conditionally.js
Updating the item...
UpdateItem succeeded: {"Attributes":{"UsageCount":3}}
prompt>node updateitem_stock_conditionally.js
Updating the item...
UpdateItem succeeded: {"Attributes":{"UsageCount":4}}
prompt>node updateitem_stock_conditionally.js
Updating the item...
UpdateItem succeeded: {"Attributes":{"UsageCount":5}}
prompt>node updateitem_stock_conditionally.js
Updating the item...
Unable to update item. Error JSON: {
"message": "The conditional request failed",
"code": "ConditionalCheckFailedException",
"time": "2017-04-26T20:29:21.710Z",
"requestId": "d73571f3-17f3-4aca-a3cf-7f13019a0292",
"statusCode": 400,
"retryable": false,
"retryDelay": 0
}