如果该值存在,则递增该值,否则在DynamoDB中添加新条目 [英] Increment the value if it exists, else add a new entry in DynamoDB

查看:0
本文介绍了如果该值存在,则递增该值,否则在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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆