我试图" 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
。