【发布时间】:2023-04-10 23:07:01
【问题描述】:
在 1 分钟周期内,我收到 2 个事件(mqtt 消息),它们进入 Lambda 函数 (.js)。
事件一:
{
"ID": 789,
"Value1": 1,
"Value2: 2,
}
事件二:
{
"ID": 789,
"Value3: 3
}
问题:目前我的代码首先将事件 1 放入数据库中的一行。当事件 2 到达时,它会覆盖并清除 Value1 和 Value2,所以一分钟后我在 DB 中只有 Value3。
问题:如何编辑代码,使其仅填写 DynamoDB 行中的空值? 我已经尝试过 ConditionExpression 但没有成功..
console.log('Loading function');
var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();
var table = "TABLE";
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var params = {
TableName:table,
Item:{
"ID": event.ID,
"Value1": event.Value1,
"Value2": event.Value2,
"Value3": event.Value3,
"TimeStamp": String(Math.round(Date.now() / 60000) * 60000)
},
};
console.log("Adding...");
dynamo.put(params, function(err, data) {
if (err) {
console.error("Unable to add. Error JSON:", JSON.stringify(err, null, 2));
context.fail();
} else {
console.log("Added:", JSON.stringify(data, null, 2));
context.succeed();
}
});
}
更新:
使用“dynamo.update”而不是“dynamo.put”编辑代码。现在代码无法创建新行。 Json 日志给出缺少键的错误。
console.log('Loading function');
var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();
var table = "TABLE";
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var params = {
TableName:table,
Item:{
"ID": event.ID,
"Value1": event.Value1,
"Value2": event.Value2,
"Value3": event.Value3,
"TimeStamp": String(Math.round(Date.now() / 60000) * 60000)
},
};
console.log("Adding...");
dynamo.update(params, function(err, data) {
if (err) {
console.error("Unable to add. Error JSON:", JSON.stringify(err, null, 2));
context.fail();
} else {
console.log("Added:", JSON.stringify(data, null, 2));
context.succeed();
}
});
}
DynamoDB 中的 TABLE 配置:
Table name TABLE
Primary partition key TimeStamp (String)
Primary sort key -
【问题讨论】:
-
update的 API 与put的 API 不同。如错误所述,您需要将key参数传递给调用等。请参阅此处的update文档:docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/…
标签: json amazon-web-services aws-lambda amazon-dynamodb