dynamodDB putItem:" UnexpectedParameter:Unexpected key' L'发现于params.Item"

时间:2016-10-27 00:57:45

标签: arrays amazon-dynamodb

我正试图" putItem"一个新的记录到dynamoDB数据库但未能尝试在数据中包含一个数组。我的params.Item看起来如下:

msg.params.Item = {
    fileName: {S: "filename"}, // database is keyed on filename
    userEmail: {S: "emailaddress"},
    transcription: {S: "text here"},
    features: {L: [ { "relevance": {S: "0.900906"}, "text": {S: "keyword"}} ]}
};

我反复收到错误" UnexpectedParameter:Unexpected key' L'发现于params.Item [' features']"。我假设我已经以某种方式格式化了"功能"数组不正确,但我无法弄清楚我的错误在哪里。我尝试了很多不同的数组咒语。任何帮助表示赞赏,因为使用数组工作dynamoDB putItem javascript的网上示例令人震惊。

仅供参考:我在Node-RED中使用node.js,这可能解释了奇怪的代码,但我之前使用Cloudant数据库工作得很好。只有dynamoDB在这个数组上窒息。

3 个答案:

答案 0 :(得分:2)

你错过M地图:

features: {L: [ { "relevance": {S: "0.900906"}, "text": {S: "keyword"}} ]}

应该是

features: {L: [ {M: {"relevance": {S: "0.900906"}, "text": {S: "keyword"}}} ]}

答案 1 :(得分:0)

以下代码应成功创建项目。只要遵循以下映射,就不需要单独提及DynamoDB数据类型。

JavaScript类型 - > DynamoDB类型

数组 - > →

对象 - >图

JavaScript data type to DynamoDB data type mapping

var docClient = new AWS.DynamoDB.DocumentClient();    
var table = "files";    
var params = {
    TableName:table,
    Item:{
        "fileName" : "file1",
        "userEmail" : "abc@gmail.com",
        "transcription" : "transcription text",
        "features" : [{ "relevance":  "0.900906", "text":  "keyword"}]

    }    
};

console.log("Adding a new item...");
docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
});

答案 2 :(得分:0)

您可能需要查看apiVersion。我遇到了这个问题,因为我没有使用最新版本,2012-08-10,而不是2011-12-05