2015-08-20 2 views
0

Итак, у меня есть эта таблица, в которой строки имеют один из двух наборов атрибутов. Ряд начинает свою жизнь с одного набора, затем переходит во второй набор (и остается таким образом до удаления). Оба набора имеют один общий признак.Обновление DynamoDB с действием ADD на числовой атрибут

Проблема в том, что я хотел бы преобразовать строку из первого набора атрибутов во второй набор атрибутов с просто обновлением. Я не хочу читать, просто чтобы получить этот единственный общий атрибут. Я понял, что если вы выполните UpdateRequest, каждый атрибут, не содержащийся в обновлении, будет уничтожен. Так как общий атрибут является численным я понял, я буду обманывать немного с действием атрибута ADD, как это:

new AttributeValueUpdate() 
    .withAction(AttributeAction.ADD) 
    .withValue(new AttributeValue().withN("0")); 

Согласно documentation, это действие в связке с типом атрибута (Number) должен добавить значение (0 в этом случае) до текущего значения атрибута. Однако это ведет себя как действие PUT, так как после операции этот атрибут имеет 0 в качестве значения.

Так вопросы:

  1. Является ли ADD действие работает как я ожидаю его? Другими словами, добавление 0 к атрибуту заставляет его выжить UpdateRequest? Если да, то что я могу делать неправильно, поскольку это, кажется, не работает для меня?

  2. Предполагая, что действие ADD работает по назначению, и я просто неверно истолковал его роль. Есть ли другой способ сохранить значение атрибута во время обновления?

+0

API updateItem должен позволять вам частично обновлять, как вам хочется. Тем не менее, он будет вставлять элемент, если первичный ключ не существует. Что касается, если атрибут не существует, в документации упоминается, что оно принимает значение по умолчанию 0, если оно не существует. Поэтому я бы либо дважды проверял, что атрибут равен 0, либо его нет. –

+0

@RaymondLin После двойной проверки с временным запросом 'GetItem' перед обновлением выяснилось, что данного атрибута не было. Если вы хотите создать ответ, я буду рад проголосовать за него и принять его. –

+0

Конечно, я пойду вперед и сделаю это. Рад, что ты заработал! –

ответ

1

API updateItem позволяет частично обновить ваш товар. Тем не менее, он будет вставлять элемент, если первичный ключ не существует. Если атрибут не существует, он принимает значение по умолчанию 0, если оно не существует. Поэтому я бы либо дважды проверял, установлен ли ваш атрибут 0, либо не существует, чтобы подтвердить ваш результат.

Смежные вопросы