我有一个带有列和主键的DynamoDB表,如下所示ipAddress
:
我正在从我的React网站获取用户的IP地址,并通过Lambda函数和API Gateway POST请求将其插入DynamoDB。
如果DynamoDB中已经存在来自React网站的IP地址,则增加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,如果record不存在,则两者都会创建一条记录。但是update-item接受UpdateExpression来帮助我们更新现有属性。
UpdateExpression: "SET visits = if_not_exists(visits, :initial) + :num"
if_not_exists
initial
当属性visits
不存在时,有助于首次使用值。
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);
}
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句