2016-04-01 13 views
0

変数を使用してマップキーを設定しようとしている単純なJSON配列があります。 配列にはDynamoDBのマップ機能が使用されており、 'hours'という最初のマップには15のキーを入れたい入れ子マップが含まれています。しかし、そのキーをその時刻に応じて変更したいので、変数をJSON配列のネストされたマップキーに変換します。DynamoDBのキー名として変数を渡すputItem JSON配列

私はこの問題を単純化するために15にハードコードしました。

DynamoDBは、実際には、変数hourを文字列「時間」に変更し、操作中にset変数の値を無視して、putItemを実行します。変数名をキー名に渡す方法に関するアイデアはありますか?

var hour = "15"; 

"hours" : {"M" : { 
    hour : {"M" : { //The hour variable is used as a key 
      "action1" : {"N" : "1"}, 
      "action2" : {"N" : "1"} 
      } 
    } 
    } 
} 

答えて

0

あなたparamsExpressionAttributeNames:ExpressionAttributeValues:を使用してください。次のように(documentClientを使用してjavascriptのタイプを自動的に変換する)適切な方向にあなたを指し示すはずですが、新しい#hrネストされたフィールドを追加するか、古いフィールドを削除するかなどを決定しなければならず、また、#hrsマップ空の地図であっても、アイテム内で始まることがあります。最後に、既存の#hrネストされたフィールドを上書きし、存在しない場合は新しいフィールドを作成します。もう一度、あなたの絶対的な必要性についてはここでは分かりません。

var hour = 15; //or whatever number you need 
var dynamoDBdc = new AWS.DynamoDB.DocumentClient(); 
var params = { 
     TableName:     <yourtablename>, 
     Key:      <yourkey>, 
     UpdateExpression:   "SET #hrs.#hr = :value", 
     ExpressionAttributeNames: {"#hrs": "hours", "#hr": hour.toString()}, 
     ExpressionAttributeValues: {":value": {"action1": 1, "action2": 2}}, 
     ReturnValues:    "ALL_NEW" //or whatever you want here 
    }; 
dynamoDBdc.update(params, function(err, data) { 
    if(err) { 
     //handle it 
    } 
    else { 
     //your subsequent code 
    } 
} 

詳細情報はここで見つけることができます: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html#ExpressionAttributeNames

、ここで: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

私はこのことができます願っています。

関連する問題