2017-02-08 6 views
1

私はusersテーブルを持っています。friendsという属性があります。これはすべてのユーザーの友人のIDのセットになります。AWS DynamoDB - セットが存在する場合にセットに値を追加するにはどうすればよいですか?セットが存在しない場合は、値を含むセットを作成します。

最初に、ユーザーが作成されたときに、友人属性を空のセットにインスタンス化しようとしましたが、空の属性を持つことができないというエラーが表示されます。

誰かがまだ友だちを持っていない場合には私が見つけることができる唯一の解決策は、ユーザーの属性を読み取ることです。存在しない場合は、属性を追加する友人のリストに設定します。それが存在する場合は、新しい友人をセットに追加するADDで更新を実行するだけです。

AWSを2回呼び出す必要はありません。

セットが存在しない場合はそれを作成する方法はありますか?それがあれば追加しますか? SETデータ型の

答えて

2

: -

ADDは - 属性が存在しない場合は、属性とその値がアイテムに追加されます。属性が存在する場合、 ADDの動作は属性のデータ型に依存します。

既存のデータ型がセットであり、値もセットの場合は、 に値が追加されます。既存のセット。たとえば、属性値が のセット[1,2]であり、ADDアクションが指定された[3]の場合、最後の 属性値は[1]になります(これは一連の操作で、 は数学的な加算ではありません) 2,3]。追加アクションがセット属性に対して が指定され、指定された属性タイプが が既存のセットタイプと一致しない場合、エラーが発生します。両方のセットは同じ プリミティブデータ型を持たなければなりません。たとえば、既存のデータ型が文字列の に設定されている場合、Valueは文字列のセットでなければなりません。数字セットとバイナリセットの場合も同様です。

例: -

最初の更新: -

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" 
    }; 
関連する問題