我有一个简单的JSON数组,我正在尝试使用一个变量来设置一个映射键。该数组使用DynamoDB的映射功能,第一个名为‘hour’的映射包含一个嵌套映射,我希望该映射的键值为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"}
}
}
}
}发布于 2016-10-19 17:53:03
在params中使用ExpressionAttributeNames:和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
我希望这能帮到你。
https://stackoverflow.com/questions/36361111
复制相似问题