2016-06-19 23 views
2

文字列のリストであるアイテム属性を更新しようとしています。 属性が存在しない場合にのみ更新できます(追加)。 種類のlist_append & if_not_exists。既存の要素をDynamoDBの配列に追加します。

のvarのparams = {...

UpdateExpression: 

'友人= list_append(if_not_exists(友人、new_friend:EMPTY_LIST)を、)SET' これは

ExpressionAttributeValues:{ 
    ":new_friend": [{"S":"Bobo"}], 
    ":empty_list" :[] 
} }; 

、方法はありますか?そう ボボはまだ私の「友人」リストで、それはあなたがあなたの条件のためと「list_append」「が含まれていない」を使用することができ、それを

答えて

5

を追加しますされていない場合。

友人がまだリストにない場合、下のコードはリストに新しい友人を挿入します。

友人が既にリストに存在する場合、「条件付き要求は失敗しました」と表示されます。

エラーメッセージ条件が失敗した場合: -

Unable to update item. Error JSON: { 
    "message": "The conditional request failed", 
    "code": "ConditionalCheckFailedException", 
    "time": "2016-06-22T08:18:36.483Z", 
    "requestId": "86805965-240b-43e0-8fdc-77fb9ae1b15c", 
    "statusCode": 400, 
    "retryable": false, 
    "retryDelay": 0 
} 

以下のコードは正常に動作します。それは正常にテストされています。

コードサンプル:

var AWS = require("aws-sdk"); 

AWS.config.update({ 
    region : "us-west-2", 
    endpoint : "http://localhost:8000" 
}); 

var docClient = new AWS.DynamoDB.DocumentClient(); 

var table = "users"; 

var userid = 1; 
var friendId = ["f4"]; 
var friendIdStr = "f4"; 


//Add the new DOCUMENT TYPE attribute to the table 
var params = { 
    TableName : table, 
    Key: { 
     "id" : userid 
    }, 
    "UpdateExpression": "set friends = list_append (friends, :friendId)", 
    "ConditionExpression": "not contains (friends, :friendIdStr)", 
    "ExpressionAttributeValues": { 
     ":friendId": friendId, 
     ":friendIdStr" : friendIdStr 
    }, 
    "ReturnValues" : "UPDATED_NEW" 
}; 

console.log("Updated an item..."); 
docClient.update(params, function(err, data) { 
    if (err) { 
     console.error("Unable to update item. Error JSON:", JSON.stringify(err, 
       null, 2)); 
    } else { 
     console.log("Updated item:", JSON.stringify(data, null, 2)); 
    } 
}); 
+0

おかげで素晴らしいですね!うまく動作します! –

+0

ようこそ。 – notionquest

+1

fururリーダの精度: 'list_append()'関数のパラメータは配列でなければならないので、 'friendId'変数の型に注意してください(' var friendId = ["f4"] ')。 – Sylvain

関連する問題