我有一个简单的JSON数组,我正在尝试使用变量设置地图键。 该数组使用DynamoDB的地图功能,第一个名为'hours'的地图包含一个嵌套的Map,我想要一个15的密钥。但是,我希望该密钥根据一天中的小时而改变,我传递了一个变量进入JSON数组嵌套的映射键,它将反映出来。
对于以下内容,我只是将其硬编码为15以简化问题。
问题在于,DynamoDB确实运行了putItem,它将变量hour更改为字符串“hour”,并在操作期间忽略set变量的值。关于如何将变量值传递给键名的任何想法?
var hour = "15";
"hours" : {"M" : {
hour : {"M" : { //The hour variable is used as a key
"action1" : {"N" : "1"},
"action2" : {"N" : "1"}
}
}
}
}
答案 0 :(得分:2)
在ExpressionAttributeNames:
中使用ExpressionAttributeValues:
和params
。以下(使用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
我希望这会有所帮助。