我正在尝试实现一些我认为很标准的东西,但是我已经碰壁了。我有一堆要存储在DynamoDB中的数据
const putDataParams = {
TableName: "sensorNodeData2",
Item: {
"deviceId": {"S": event.deviceId},
"timeStamp": {"N": event.time},
"rssi": {"S": event.rssi},
"seq": {"S": event.seqNum},
"payload": {"L": payloadArrayInt16.map(x => x.N)}
}
};
console.log('Data PutItem Params = ' + JSON.stringify(putDataParams));
dynamodb.putItem(putDataParams, function(err, data) {
if (err) {
console.log(err);
context.fail('ERROR: Dynamo failed: ' + err);
}
else {
console.log(data);
context.succeed('SUCCESS');
}
});
问题是我一生无法解决如何使列表部分正常工作的问题。我首先将其定义为:
var payloadArrayInt16= new Uint16Array(dataArrayMaxIndex);
,错误是:
"errorMessage": "ERROR: Dynamo failed: InvalidParameterType: Expected params.Item[payload].L to be an Array"
然后我尝试了:
var payloadArrayInt16= [dataArrayMaxIndex];
这经历了,但是显然没有做我想要的...当我打印出参数时,它没有取出数组的内容。它看到:
"Temp":{"L":[null,null,null,null,null,null,null,null,null,null]}
我正在拔头发。关于如何执行此操作,任何地方都没有一个示例。有人可以让我摆脱痛苦吗?!
答案 0 :(得分:2)
DynamoDB数值数组的表示方式如下:
"payload": {
"L": [
{
"N": "1"
},
{
"N": "2"
},
{
"N": "3"
}
]
}
现在,如果您的输入数组payloadArrayInt16是这样的:
[1,2,3]
您必须将其转换为dynamo db格式:
payloadArrayInt16.map(x => { return { "N": x.toString() }});
但是,您可以使用this official aws dymanodb js library来简化生活 它处理本地js对象结构到dynamo db数据结构之间的所有转换,反之亦然。
此外,如果您使用的是AWS IoT Core,则可以直接将数据写入dynamodb,而无需任何lambda。