Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js:如何使用putitem将整数添加到带有DynamoDB的列表中_Node.js_Amazon Dynamodb - Fatal编程技术网

Node.js:如何使用putitem将整数添加到带有DynamoDB的列表中

Node.js:如何使用putitem将整数添加到带有DynamoDB的列表中,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,我正在为我创建的游戏开发Node.js服务器。服务器充当api来检索用户帐户信息,包括他们的个人高分。我有一个单独的项目为每个帐户,其中包含他们的用户名和他们的游戏分数列表。在DynamoDB中,我似乎找不到任何将值插入列表的示例代码,我希望有人能帮助我。我没有找到这个具体行动的文件。我只是尝试使用putitem函数,我知道它可以插入字符串和其他数据类型,但我没有成功地插入到列表数据类型中。我最近对此的尝试如下所示: var params = { TableName : "usersco

我正在为我创建的游戏开发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:应为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(太平洋标准时间)}我认为您有一些不同于解决方案中提到的内容。您可以显示变量和赋值或完整代码吗?您是否将分数定义为键(即排序键或哈希键)?如果是,主键属性必须定义为类型字符串、数字或二进制。