全部-我正在处理特定的业务需求,并且由于Google缺乏信息,我想我会在这里停止一些信息:
我基本上是摄取CSV,将其转换为JSON对象,然后将其填充到Dynamo中。有趣的是,行值的数据类型在字符串和数字之间跳转,但是我无法使其正常工作。
我正在使用Node和aws-sdk,并从字面上使用Amazon Docs对它进行了直接测试,但仍然无法正常工作,请参见下文:
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显然是一个具有Name和Age,字符串和数字的Map。这直接来自文档-
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property
类型为Map的属性。例如:
“ M”:{“名称”:{“ S”:“乔”},“年龄”:{“ N”:“ 35”}}
但是在Dynamo中这样输出-
所以我的问题是-为什么这不起作用?
编辑:错别字。
答案 0 :(得分:0)
U-我解决了这个问题。如果有人碰到我,我会把它留在这里。
两个问题-我使用的是DynamoDB.DoucmentClient()。put API调用,而不是DynamoDB.putItem调用,并且我的params对象关闭但不正确。请参阅下面的嵌套Map AttributeTypes的工作示例-
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);
}
});