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





Это можно сделать, используя условное выражение для выражения фильтра. Но, пожалуйста, не делай этого.
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'
Чтобы удовлетворить ваши потребности, вам необходимо использовать эластичный поиск, чтобы получить нужные элементы, после чего вы можете обновить данные по ключу.
Нет. PutItem требует обновления первичного ключа элемента, поэтому он не будет проходить через весь набор данных. Функция PutItem даже не поддерживает выражения фильтра
Вы можете поместить условное выражение в обновление одного элемента, чтобы обновление завершилось неудачно, если условие не выполняется. Однако это не приведет к сбою всего пакета, а только одного обновления. Ответ на пакетное обновление будет содержать информацию о том, какие обновления выполнены успешно, а какие нет.
Вы должны посмотреть на Транзакции DynamoDB. В нем есть условные выражения, которые вы ищете, и пакетные обновления типа «все или ничего».
Я думаю, вы ищете условные выражения, проверьте это ссылка на сайт.
Вы должны использовать 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, если Price больше 500. поэтому первые два запуска update-item должны работать, а при третьем запуске, поскольку цена снижена до 500 (что составляет не более 500) запустить не удастся.
Ключ, который я использую, - это глобальный индекс условия. Будет ли он по-прежнему проходить через весь набор данных?