Условное обновление в локальном dynamodb Amazon

Я поместил следующий объект в локальную базу данных Dynamo.

class LicenseEntitilement {

String featureName;       // Primary key
int EntitilementCount;
int UsageCount;
}

Мне нужно сделать условное обновление со следующим выражением -

Условное выражение: (UsageCount + askCount) ‹ EntitilementCount askCount — это целое число.

(Значения UsageCount и EntitlementCount находятся в БД, а askCount — это локальная переменная.)

Выражение обновления: UsageCount = UsageCount + askCount.

Выдает исключение, что «+» не допускается в условном выражении. Есть ли способ добиться этого условного обновления?


person Sameer Kanikdale    schedule 26.04.2017    source источник


Ответы (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
}
person notionquest    schedule 26.04.2017
comment
Это условие не поможет во всех случаях. В вашем примере, если :askedCount = 3. И если вы выполняете его дважды, то это позволяет и во второй раз. Чтобы предотвратить это, нам нужно следующее выражение условия – (UsageCount + askedCount) ‹ EntitilementCount - person Sameer Kanikdale; 27.04.2017