2016-10-27 7 views
0

新しいレコードをDynamoDBデータベースに「putItem」しようとしていますが、データに配列を含める試みが失敗しています。私params.Itemは、次のようになります。dynamodDB putItem: "UnexpectedParameter:予期しないキー 'L'が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:params.Item [ '機能']で見つかった予期しないキー 'L'"。私は何とか "フィーチャ"配列を間違ってフォーマットしたと仮定しますが、私のエラーがどこにあるのか分かりません。私は配列の多くの異なる呪文を試した。 DynamoDB putItem javascriptを使用して作業しているオンラインの例は、アレイを使ってごくわずかです。

FYI:Node-REDの中でnode.jsを使用していますが、これは奇数コードを説明しているかもしれませんが、以前はCloudantデータベースでうまく動作していました。 dynamoDBだけがこの配列で窒息しています。

答えて

0

以下のコードは、項目を正常に作成する必要があります。 DynamoDBのデータ型は、以下のマッピングに従う限り、個別に記述する必要はありません。

JavaScriptのタイプ - > DynamoDBのタイプ

アレイ - > L

オブジェクト - >地図

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" : "[email protected]", 
     "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)); 
    } 
}); 
1

あなたがマップのMを逃しています:

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

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

+0

感謝しなければなりません。私はこの変種を試しましたが、エラーメッセージ "UnexpectedParameter:予期しないキー 'L'がparams.Item ['features']"に見つかりました。おそらく、これは私が使用しているdynamoDB Node-REDノードの成果物です(https://github.com/michaelmruta/node-red-contrib-aws-dynamodb/blob/master/dynamodb.html)。 –

+0

@TedBarnettあなたは 'フィーチャー'を除外してアイテムを挿入できますか? – rob

+0

@TedBarnett私はこの銃で銃を飛ばしているかもしれませんが、あなたがリンクしているライブラリが[アイテムをラップしているようです](https://github.com/michaelmruta/node-red-contrib-aws-dynamodb/blob /master/dynamodb.js#L76)。 [npm doc](https://www.npmjs.com/package/dynamodb-data-types#quick-example)によると、通常のデータ構造体を 'attr.wrap()'に渡すことで、DynamoDBが必要とする適切なラベル付けが追加されます。 – rob

関連する問題