Условное обновление в Амазоне локального динамодба

Я поместил следующий объект в локальную базу данных 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
}
Другие вопросы по тегам