如果该值存在,则递增该值,否则在DynamoDB中添加新条目 [英] Increment the value if it exists, else add a new entry in DynamoDB
本文介绍了如果该值存在,则递增该值,否则在DynamoDB中添加新条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个DynamoDB表,其列和主键为ipAddress
:
- ipAddress
- 访问
我正在从Reaction网站获取用户的IP地址,并通过Lambda函数和API Gateway POST请求将其插入到DynamoDB。
如果来自React网站的IP地址已存在于DynamoDB中,则增加visits
列中的值。如果不是,则使用新的IP地址和visits = 1
创建新记录。我尝试使用ConditionExpression,但无济于事。
到目前为止,我只使用lambda插入ipAddress。以下是我在NodeJS中的Lambda函数:
const AWS = require("aws-sdk");
const documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async event => {
const { ipAddress} = JSON.parse(event.body);
const params = {
TableName: "ipAddress",
Item: {
ipAddress: ipAddress,
}
};
try {
const data = await documentClient.put(params).promise();
const response = {
statusCode: 200,
};
return response;
}
catch (e) {
return {
statusCode: 500,
body: JSON.stringify(e)
};
}
};
推荐答案
我们需要使用update-item而不是put-item,如果记录不存在,两者都会创建一条记录。但UPDATE-ITEM接受UpdateExpression帮助我们更新现有属性。
UpdateExpression: "SET visits = if_not_exists(visits, :initial) + :num"
if_not_exists
帮助在属性visits
不存在时第一次使用initial
值。
docClient.update(
{
TableName: "ipAddress",
Key: {
ipAddress: ipAddress,
},
UpdateExpression: "SET visits = if_not_exists(visits, :initial) + :num",
ExpressionAttributeValues: {
":num": 1,
":initial": 0,
},
},
function (error, result) {
console.log("error", error, "result", result);
}
);
这篇关于如果该值存在,则递增该值,否则在DynamoDB中添加新条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文