Node.js:如何使用putitem将整数添加到带有DynamoDB的列表中
我正在为我创建的游戏开发Node.js服务器。服务器充当api来检索用户帐户信息,包括他们的个人高分。我有一个单独的项目为每个帐户,其中包含他们的用户名和他们的游戏分数列表。在DynamoDB中,我似乎找不到任何将值插入列表的示例代码,我希望有人能帮助我。我没有找到这个具体行动的文件。我只是尝试使用putitem函数,我知道它可以插入字符串和其他数据类型,但我没有成功地插入到列表数据类型中。我最近对此的尝试如下所示:Node.js:如何使用putitem将整数添加到带有DynamoDB的列表中,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,我正在为我创建的游戏开发Node.js服务器。服务器充当api来检索用户帐户信息,包括他们的个人高分。我有一个单独的项目为每个帐户,其中包含他们的用户名和他们的游戏分数列表。在DynamoDB中,我似乎找不到任何将值插入列表的示例代码,我希望有人能帮助我。我没有找到这个具体行动的文件。我只是尝试使用putitem函数,我知道它可以插入字符串和其他数据类型,但我没有成功地插入到列表数据类型中。我最近对此的尝试如下所示: var params = { TableName : "usersco
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:应为params.Item['scores'].L作为数组]
消息:“预期params.Item[\'scores\'].L为数组”,
代码:“InvalidParameterType”
我明白为什么这个方块不起作用,但我不明白怎么做。
任何帮助都将不胜感激!let data={
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
}
}
“用户名”:“名称”,
“分数”:[“val1”,“val2”]
};
设attrs=toAttributes(data);
发电机B.putItem({
表名:“下划线”,
项目:属性,
//例如,您不需要,只需要一些额外的信息
条件表达式:“属性不存在(#id)”,
表达式属性名称:{'#id':''}
});
toAttributes=obj=>{
返回Object.keys(obj).reduce((prevResult,sKey)=>{
prevResult[sKey]=getAttributeFromValue(obj[sKey]);
返回结果
}, {});
};
getAttributeFromValue=值=>{
变量类型=值的类型;
如果(类型==“字符串”){
返回{S:value};
}else if(类型==“编号”){
返回{N:value.toString()};
}else if(类型==“布尔”){
返回{BOOL:value};
}else if(value.constructor==数组){
var数组=value.map(函数(元素){
返回getAttributeFromValue(元素);
});
返回{L:array}
}else if(type==“object”&&value!==null){
var-map={};
for(var输入值){
map[key]=getAttributeFromValue(value[key]);
}
返回{M:map}
}否则{
返回空
}
}
让数据={
“用户名”:“名称”,
“分数”:[“val1”,“val2”]
};
设attrs=toAttributes(data);
发电机B.putItem({
表名:“下划线”,
项目:属性,
//例如,您不需要,只需要一些额外的信息
条件表达式:“属性不存在(#id)”,
表达式属性名称:{'#id':''}
});
toAttributes=obj=>{
返回Object.keys(obj).reduce((prevResult,sKey)=>{
prevResult[sKey]=getAttributeFromValue(obj[sKey]);
返回结果
}, {});
};
getAttributeFromValue=值=>{
变量类型=值的类型;
如果(类型==“字符串”){
返回{S:value};
}else if(类型==“编号”){
返回{N:value.toString()};
}else if(类型==“布尔”){
返回{BOOL:value};
}else if(value.constructor==数组){
var数组=value.map(函数(元素){
返回getAttributeFromValue(元素);
});
返回{L:array}
}else if(type==“object”&&value!==null){
var-map={};
for(var输入值){
map[key]=getAttributeFromValue(value[key]);
}
返回{M:map}
}否则{
返回空
}
}
您可以这样更改分数值:-
如果分数定义为字符串变量:-
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
}
}
如果分数定义为数组:-
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
}
}
您可以按如下方式更改分数值:- 如果分数定义为字符串变量:-
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
}
}
如果分数定义为数组:-
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
}
}
我尝试了此解决方案的第一个版本,但出现了一个错误。我确实在尝试将分数变量添加到dynamodb列表中。尝试此操作时,出现了错误:{[UnexpectedParameter:在params.Item['scores]]中找到了意外的键“0]消息:“在参数项[\'scores\']”中找到意外键“0\”,代码:“意外参数”,时间:2016年11月30日星期三07:18:55 GMT-0800(太平洋标准时间)}我想你有一些不同于解决方案中提到的内容。你能展示你的变量和赋值或完整代码吗?你有没有把分数定义为键(即排序键或散列键)?如果是,主键属性必须定义为字符串、数字或二进制类型。我尝试了此解决方案的第一个版本,但出现了错误。我确实在尝试将分数变量添加到dynamodb列表中。尝试此操作时,出现错误:{[UnexpectedParameter:在params.Item['scores']中找到意外键“0”]消息:“在params.Item[\'scores\']中找到意外键“0\”,代码:“UnexpectedParameter”,时间:2016年11月30日星期三07:18:55 GMT-0800(太平洋标准时间)}我认为您有一些不同于解决方案中提到的内容。您可以显示变量和赋值或完整代码吗?您是否将分数定义为键(即排序键或哈希键)?如果是,主键属性必须定义为类型字符串、数字或二进制。