Node.js:如何使用putitem将整数添加到列表w / DynamoDB

时间:2016-11-28 23:24:28

标签: node.js amazon-dynamodb

我正在为我创建的游戏开发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'

我理解为什么这个块不起作用,但我不明白该怎么做。 任何帮助将不胜感激!

2 个答案:

答案 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
    }
}