Обновление PutItem Dynamodb с использованием условия

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 919
4

Ответы 4

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

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'

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

Ключ, который я использую, - это глобальный индекс условия. Будет ли он по-прежнему проходить через весь набор данных?

Dean 06.01.2019 11:39

Нет. PutItem требует обновления первичного ключа элемента, поэтому он не будет проходить через весь набор данных. Функция PutItem даже не поддерживает выражения фильтра

Brian Winant 07.01.2019 10:22

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

Вы должны посмотреть на Транзакции 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) запустить не удастся.

Другие вопросы по теме