#node.js #amazon-dynamodb #aws-sdk
#node.js #amazon-dynamodb #aws-sdk
Вопрос:
Все — я работаю над конкретным бизнес-требованием, и из-за отсутствия информации в Google я подумал, что остановлюсь здесь для получения некоторой информации:
Я в основном принимаю CSV, преобразую его в объект JSON и загружаю его в Dynamo. Интересная часть заключается в том, что типы данных значений строк переходят между строками и числами, но я не могу заставить это работать должным образом.
Я использую Node и aws-sdk и буквально использовал документы Amazon, чтобы протестировать это напрямую, и это все равно не сработало, см. Ниже:
var params = {
TableName: foo,
Item: {
masterReportsUuid: uuidv4(),
reportDate: _eventDate,
"testAttribute": {
"Name": {
"S": "Joe"
},
"Age": {
"N": "35"
}
},
}
};
dbDocClient.put(params, (err, data) => {
if (err) {
//log to CloudWatch
console.log(err);
reject(err);
} else {
resolve(data);
}
});
Очевидно, что TestAttribute представляет собой карту с именем и возрастом, строкой и номером. Это прямо из документации —
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property
Атрибут типа Map. Например:
«M»: {«Name»: {«S»: «Joe»}, «Age»: {«N»: «35»}}
Но в Dynamo это выводится следующим образом —
Итак, мой вопрос — почему это не работает?
РЕДАКТИРОВАТЬ: опечатки.
Ответ №1:
Тьфу — я исправил проблему. Я оставлю это здесь на случай, если кто-нибудь столкнется с этим.
Две проблемы — я использовал вызов API DynamoDB.DoucmentClient().put, а не вызов DynamoDB.PutItem, И мой объект params был близок, но не корректен. Пожалуйста, смотрите ниже рабочий пример вложенных типов атрибутов карты —
const dbDocClient = new aws.DynamoDB.DocumentClient();
const dbDynamo = new aws.DynamoDB();
var params = {
TableName: _ReportsTable,
Item: {
testUuid: {
"S": uuidv4()
},
testDate: {
"S": _eventDate
},
testAttribute: {
"M": {
"Name": {
"S": "Joe"
},
"Age": {
"N": "35"
}
}
},
}
};
dbDynamo.putItem(params, (err, data) => {
if (err) {
//log to CloudWatch
console.log(err);
reject(err);
} else {
resolve(data);
}
});