我正在为我创建的游戏开发Node.js服务器。服务器充当api以检索用户帐户信息,包括他们的个人高分。我为每个帐户都有一个单独的项目,其中包含用户名和游戏分数列表。我似乎无法找到任何用于将值插入DynamoDB列表的示例代码,我希望有人可以帮助我。我找不到这个具体行动的文件。我只是试图使用我知道用于插入字符串和其他数据类型的putitem函数,但我没有运气插入列表数据类型。我最近的尝试看起来如下:
var params = {
TableName : "userscores",
Item:{
"username" : {"S": username},
"scores" : {"L": {"S": score}}
}
}
dynamodb.putItem(params, function(err, data) {
if(err)
console.log(err);
else
console.log(JSON.stringify(data));
});
错误如下所示: {[InvalidParameterType:Expected params.Item ['scores']。L是一个数组] 消息:'预期的params.Item [\'得分\'] .L是一个数组', 代码:'InvalidParameterType'
我理解为什么这个块不起作用,但我不明白该怎么做。 任何帮助将不胜感激!
答案 0 :(得分:2)
let data = {
"username" : "name",
"scores" : ["val1", "val2"]
};
let attrs=toAttributes(data);
dynamodb.putItem({
TableName: "underscored",
Item: attrs,
// not needed for you example, just some extra info
ConditionExpression: 'attribute_not_exists(#id)',
ExpressionAttributeNames: {'#id': '<aUniqueColumnNameIfYouUse>'}
});
toAttributes = obj => {
return Object.keys(obj).reduce((prevResult, sKey)=> {
prevResult[sKey] = getAttributeFromValue(obj[sKey]);
return prevResult
}, {});
};
getAttributeFromValue = value => {
var type = typeof value;
if (type === "string") {
return { S: value };
} else if (type === "number") {
return { N: value.toString() };
} else if (type === "boolean") {
return { BOOL: value };
} else if (value.constructor === Array) {
var array = value.map(function(element) {
return getAttributeFromValue(element);
});
return { L: array }
} else if (type === "object" && value !== null) {
var map = {};
for (var key in value) {
map[key] = getAttributeFromValue(value[key]);
}
return { M: map }
} else {
return null
}
}
答案 1 :(得分:0)
您可以像这样更改分数值: -
如果分数定义为字符串变量: -
var scores = "s1";
var params = {
TableName : "userscores",
Item:{
"username" : {"S": username},
"scores" : [scores]
}
}
如果分数定义为数组: -
var scores = ["s1"];
var params = {
TableName : "userscores",
Item:{
"username" : {"S": username},
"scores" : scores
}
}