Обновление PutItem в Dynamodb с использованием условия - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь выполнить пакетное обновление в DynamodB. Я пытаюсь определить, могу ли я поместить в мое пакетное обновление условие, в котором говорится, должен ли один из столбцов, равный значению (которое имеет значение true), обновлять элементы, если нет ... не обновлять. Возможно ли это?

Ответы [ 4 ]

0 голосов
/ 09 января 2019

Я полагаю, вы ищете условные выражения, проверьте эту ссылку .

Вам следует использовать UpdateItem, который редактирует атрибуты существующего элемента или добавляет новый элемент в таблицу, если он еще не существует.

например. скопировано из документа aws,

В следующем примере выполняется операция UpdateItem. Он пытается снизить цену продукта на 75, но выражение условия препятствует обновлению, если текущая цена ниже 500:

aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json

Таблица ProductCatalog такая,

{
    "Id": { "N": "456"},
    "Price": {"N": "650"},
    "ProductCategory": {"S": "Sporting Goods"}
}

и values.json вот так,

{
    ":discount": { "N": "75"},
    ":limit": {"N": "500"}
}

Здесь изначально цена равна 650, с условным выражением вы пытаетесь уменьшить цену на 75, если цена больше 500. Поэтому первые два запуска элемента обновления должны работать, а при третьем - цена снижается до 500. (который не превышает 500) запустить не удастся.

0 голосов
/ 07 января 2019

Вы можете поместить условное выражение в обновление одного элемента, чтобы оно не выполнялось, если условие не выполняется. Однако это не подведет весь пакет, только одно обновление. Ответ на пакетное обновление будет содержать информацию о том, какие обновления были успешными, а какие - неудачными

0 голосов
/ 08 января 2019

Вы должны посмотреть на DynamoDB транзакций . У него есть условные выражения, которые вы ищете, и все или все пакетные обновления.

0 голосов
/ 06 января 2019

Это можно сделать, используя условное выражение для выражения фильтра. Но, пожалуйста, не делай этого.

DynamoDB - это ключ-значение NoSQL. Это означает, что вы можете получить нужные данные только по ключам. Если вы сделаете фильтр, он пропустит много записей и замедлит ваше приложение. Вы можете проверить эту статью: 5 вещей, которые вы должны знать о DynamoDB

Поэтому, когда вы CRUD-данные, рекомендуемый способ взаимодействия с данными - это ключ. Я могу перевести его в псевдокод так:

GET: SELECT * FROM THE TABLE WHERE Id ='SampleId'
UPDATE: UPDATE THE ITEM WHERE id = 'SampleId'
DELETE: DELETETHE ITEM WHERE id = 'SampleId'

Чтобы удовлетворить ваши потребности, вам нужно использовать упругий поиск, чтобы получить нужные элементы, после чего вы можете обновить данные по ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...