2016-10-27 2 views
0

Я пытаюсь «putItem» записать новую запись в базу данных dynamoDB, но при попытке включить массив в данные. Мой 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: Неожиданная клавишу 'L' найдено в params.Item [ 'функция']". Я предполагаю, что некорректно отформатировал массив «features», но я не могу понять, где моя ошибка. Я пробовал много разных заклинаний массива. Любая помощь оценивается, так как есть несколько шокирующих примеров онлайн-работы dynamoDB putItem javascript с использованием массивов.

FYI: Я использую node.js внутри Node-RED, что может объяснить нечетный код, но раньше я работал с базой данных Cloudant. Только dynamoDB задыхается от этого массива.

ответ

0

Приведенный ниже код должен создать элемент успешно. Тип данных DynamoDB не следует упоминать отдельно, если он следует за приведенным ниже отображением.

JavaScript Тип -> DynamoDB Тип

Array -> L

Object -> Карта

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']". Возможно, это артефакт узла dynodeDB Node-RED, который я использую (https://github.com/michaelmruta/node-red-contrib-aws-dynamodb/blob/master/dynamodb.html). –

+0

@TedBarnett вы можете вставить элемент, если вы исключили 'features'? – 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

Смежные вопросы