dynamodDB 放置项目: "UnexpectedParameter: Unexpected key 'L' found in params.Item"



我试图" putiitem "一个新的记录到一个dynamoDB数据库,但失败的尝试包括一个数组在数据中。我的参数。项目如下所示:

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"}} ]}
};

我反复得到错误"Unexpected parameter:在params.Item['features']中发现了意外的键'L' "。我假设我以某种方式错误地格式化了"features"数组,但我无法找出我的错误在哪里。我已经尝试了许多不同的阵列咒语。任何帮助都很感激,因为网上很少有使用数组工作dynamoDB putItem javascript的例子。

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

地图缺少M:

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

应该

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

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

JavaScript类型-> DynamoDB类型

Array -> L

Object --> Map

JavaScript数据类型到DynamoDB数据类型的映射

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));
    }
});

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

相关内容

最新更新