2017-02-08 8 views
1

У меня есть таблица пользователей, есть атрибут под названием friends, который будет набором идентификаторов всех друзей пользователя.AWS DynamoDB - Как добавить значение к набору, если набор существует, но если набор не существует, создайте набор со значением?

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

Таким образом, единственное решение, которое я мог бы найти, если у кого-то еще нет друзей, чтобы прочитать атрибут пользователя, если он не существует, установите атрибут в список с другом, который они добавляют. Если он существует, просто выполните обновление с помощью ADD, которое добавит нового друга в набор.

Я не хочу, чтобы для этого было два вызова AWS.

Есть ли способ создать набор, если он не существует, и если да, добавьте к нему?

ответ

2

Для типа данных SET: -

ADD - Если атрибут не существует, то атрибут и его значения добавляются к элементу. Если атрибут существует, того поведение ADD зависит от типа данных атрибута:

Если существующий типа данных множества, и если значение также установлено, того значения добавляется существующий набор. (Это заданная операция, не является математическим дополнением.) Например, если значение атрибута было установлено [1,2], а действие ADD указано [3], то конечным значением атрибута будет [1, 2,3]. Произошла ошибка, если действие Add имеет значение , указанное для атрибута set, и указанный тип атрибута не соответствует существующему типу набора. Оба набора должны иметь тот же самый примитивный тип данных . Например, если существующий тип данных представляет собой набор строк , значение также должно быть набором строк. То же самое имеет значение true для наборов чисел и двоичных множеств.

Пример: -

Первое обновление: -

Атрибут country нет в таблице. updateItem создал новый атрибут country со значениями (IN, UK).

var params = { 
     TableName : "Movies", 
     Key : { 
      "yearkey" : 2014, 
      "title" : "The Big New Movie 2" 
     }, 
     UpdateExpression : "ADD country :countries",    
     ExpressionAttributeValues: { 
       ':countries': docClient.createSet(["IN", "UK"])    
      }, 
     ReturnValues : "UPDATED_NEW" 
    }; 

Второе обновление: -

На этот раз updateItem добавил новое значение "США" и игнорировали существующее значение "IN".

var params = { 
     TableName : "Movies", 
     Key : { 
      "yearkey" : 2014, 
      "title" : "The Big New Movie 2" 
     }, 
     UpdateExpression : "ADD country :countries",    
     ExpressionAttributeValues: { 
       ':countries': docClient.createSet(["IN", "US"])    
      }, 
     ReturnValues : "UPDATED_NEW" 
    }; 

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

  • Нет связанных вопросов^_^