2017-02-08 86 views
1

我有一個用戶表,裏面有一個叫做friends的屬性,它將是一組所有用戶的朋友的id。AWS DynamoDB - 如果集合確實存在,如何將值添加到集合,但是如果集合不存在,請使用值創建集合?

最初我嘗試在創建用戶時將實例化的朋友屬性設置爲空集,但是我得到一個錯誤,指出您不能擁有空屬性。

因此,如果某人沒有朋友,唯一的解決方案是閱讀用戶的屬性(如果它不存在),請將屬性設置爲列表中的屬性並添加好友。如果它確實存在,那麼只需使用ADD進行更新,即可將新朋友添加到該集。

我不想爲此做兩次AWS調用。

如果不存在,是否有創建集合的方法?如果存在,添加到集合中?

回答

2

對於SET數據類型: -

ADD - 如果屬性不存在,則該屬性和它的值被添加到該項目。如果屬性不存在, 然後ADD的行爲取決於屬性的數據類型:

如果現有的數據類型是一組,並且如果該值也是一套, 則值被添加到現有的集合。 (這是一個設置操作, 不是數學加法。)例如,如果屬性值爲 set [1,2],並且ADD操作指定爲[3],則最終的 屬性值爲[1, 2,3]。如果添加操作是爲集屬性指定的 ,並且指定的屬性類型爲 與現有集類型不匹配,則會發生錯誤。兩個集合必須具有相同的原始數據類型 。例如,如果現有數據類型是字符串集合 ,則該值也必須是一組字符串。 同樣適用於數字集和二進制集。

實施例: -

首先更新: -

country屬性不存在於表中。 updateItem創建了具有提供的值(IN,UK)的新屬性country

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" 
    };