Как обновить атрибут Dynamodb на основе условия другого атрибута - PullRequest
0 голосов
/ 27 мая 2020

Например:

У меня есть:

{
 "status": "running",
 "ts": "1590560955"
}

Если текущая система ts> = выше «ts», то:

{
 "status": "completed",
 "ts": "1590560955"
}

Возможно ли это ? Здесь помогает лямбда-функция? Если да, то как?

1 Ответ

0 голосов
/ 27 мая 2020

Да, это возможно. Это называется «условным обновлением» - см. Например в этой документации . Вы можете обновить один атрибут на основе значения другого атрибута - если они принадлежат к одному и тому же элементу .

Вот пример (в Python, с использованием библиотеки Amazon boto3, но вы можете перевести его на любой язык, который вы предпочитаете):

table.update_item(
        Key={'p': p},
        UpdateExpression='SET status = :completedl',
        ConditionExpression='ts > :currentts',
        ExpressionAttributeValues={':completed': 'completed', ':currenttts': currentts})

Это условно обновляет элемент с помощью ключа p: Если ConditionExpression заполнено, то есть значение элемента ts выше, чем " currentts "(который вы предоставите), то происходит обновление, описанное в UpdateExpression: для атрибута status этого элемента устанавливается строка 'completed'.

...