增加该值(如果存在),否则在 DynamoDB 中添加新条目

2023-11-27

我有一个 DynamoDB 表,其列和主键为ipAddress:

  • IP地址
  • visits

我从我的 React 网站获取用户的 IP 地址,并通过 Lambda 函数和 API Gateway POST 请求将其插入到 DynamoDB。

如果来自 React 网站的 IP 地址已存在于 DynamoDB 中,则增加中的值visits柱子。如果没有,则使用新 IP 地址创建一条新记录并visits = 1。我尝试使用条件表达式但无济于事。

到目前为止,我仅使用 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)
    };
  }

};

我们需要使用更新项目而不是put-item,如果记录不存在,两者都会创建一条记录。但更新项目接受更新表达式帮助我们更新现有属性。

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);
  }
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

增加该值(如果存在),否则在 DynamoDB 中添加新条目 的相关文章

随机推荐

  • ReplaceAll 为 java8 lambda 函数

    给定以下变量 templateText Hi name variables put name Joe 我想使用以下代码将占位符 name 替换为值 Joe 这不起作用 variables keySet forEach k gt templa
  • MySQL 中的 DOUBLE 与 DECIMAL

    好的 所以我知道有大量文章指出我不应该使用 DOUBLE 在 MySQL 数据库上存储资金 否则我最终会遇到棘手的精度错误 重点是我不是在设计一个新的数据库 而是要求我找到优化现有系统的方法 新版本包含 783 个 DOUBLE 类型列 其
  • 在Android中使用jobb工具

    我正在运行以下命令来获取加密的 obb 文件以进行 apk 扩展 jobb d home manoj Desktop Test o main 1 com example helloworld obb k manoj pn com examp
  • Django Rest Framework 在 POST 中接收主键值并将模型对象作为嵌套序列化器返回

    我不完全确定我的问题的标题是否像我希望的那样具体 但情况是这样的 我有一个HyperlinkedModelSerializer看起来像这样 class ParentArrivalSerializer serializers Hyperlin
  • 如何在magento中获取当前产品的类别名称(在产品详细信息页面上)

    我使用了以下代码 但不适用于这种情况 category detail Mage registry current category echo category detail gt getName got 致命错误 在 app design
  • 视图未附加到窗口管理器(解决方案是什么?)

    我从我的应用程序中收到了数百个错误报告 而且所有错误报告都是相同的 这真的很烦人 因为在我的测试设备 HTC Wildfire Galaxy S I II III Galaxy Mini Galaxy Tab 10 中 这个错误从未发生过
  • x86 中“PAUSE”指令的用途是什么?

    我正在尝试创建一个自旋锁的愚蠢版本 浏览网页时 我在 x86 中发现了一条名为 PAUSE 的汇编指令 该指令用于向处理器提示自旋锁当前正在该 CPU 上运行 英特尔手册和其他可用信息指出 处理器使用此提示来避免内存顺序冲突 大多数情况下
  • Swift Playgrounds:替换 captureValue(_:withIdentifier:)

    Xcode 7 3已弃用 XCPlaygroundPage currentPage captureValue withIdentifier 它的前身 XCPCaptureValue was 已弃用在 Xcode 7 1 中 我想知道除了集合
  • 非凸优化器

    我使用 python2 7 需要找到多元标量函数的最大值 换句话说 我有这个功能 def myFun a b c d e f complex calculation that takes about 30 seconds return re
  • Python中的(1,)和(1)有什么区别[重复]

    这个问题在这里已经有答案了 正如标题所述 我发现 1 and 1 是不同的 但它们有什么区别呢 In 39 1 1 Out 39 False 试试这个来说服自己 gt gt gt type 1
  • 将 JavaScript 变量传递给 AngularJs ng-init

    我定义了以下 javascript 变量并需要传递memId值传入 AngularJs init 函数 div class mini 我收到错误 memId没有定义 您需要使用 角度 方式来完成此操作 window var app angu
  • 如何以最小的影响重新启动 CSS 动画

    有没有一种方法可以重新启动 CSS 动画 而无需克隆元素 回流 DOM 等待 setTimeout onAnimationEnd EDIT 无需 jQuery 或检查 我基本上只是在下一个绘制的帧处重新启动动画 此方法不会克隆任何元素 重排
  • 处理带有未知 IPv6 扩展标头的数据包

    Question 是否应该丢弃带有未知 IPv6 扩展标头的数据包 Details 我无法通过检查找到这个问题的答案RFC 这本书IPv6 要点第 22 页指出 如果节点需要下一个标头但无法识别下一个标头字段中的值 则需要丢弃该数据包并向数
  • 在C#中,如何可靠地杀死进程树[重复]

    这个问题在这里已经有答案了 在 C 中 我们使用以下代码来终止进程树 有时有效 有时无效 可能与 Windows 7 和 或 64 位有关 它找到给定进程的子进程的方法是调用GetProcesses获取系统中的所有进程 然后调用NtQuer
  • Airplay 按钮未显示在 AVPlayer 的播放器控件中

    我使用 AVPlayer 和 AVPlayerViewController 创建了一个视频播放器 我已经设定 allowsExternalPlayback 财产至真也 usesExternalPlaybackWhileExternalScr
  • apk (.apk) 和应用程序包 (.aab) 之间的区别

    最近谷歌推出了一个新功能app bundle这与 APK 的概念非常相似 除了灵活性和架构差异之外 我阅读了很多博客 文章来了解应用程序包与 APK 文件相比如何在设备中工作 App Bundle 的实际内部工作流程是什么 它如何在从 Go
  • 将标记替换为 html 内容

    我一直在搜索 Google Map API V3 文档 但找不到任何方法来使用我自己的 html 内容而不是图像在地图上创建自定义图标 我想显示一个动态标记 可以显示文本或我想要的任何内容 例如 div class marker Dynam
  • Java打印包含多个整数的字符串

    今天刚开始学习java 似乎无法弄清楚这一点 我正在关注 learnjavaonline org 上的教程 该教程会教您一些内容 然后要求您编写代码来执行特定操作 然后检查输出以查看其是否正确 问题是 如果它不正确 它不会说明原因 也不会为
  • Anaconda 安装后运行 pyinstaller 会导致 ImportError: no Module named 'pefile'

    I did conda install c acellera pyinstaller 3 2 3 as per Anaconda 的网站看起来它安装正确 但如果我尝试通过 cmd 运行它 我会得到以下信息 C Users Cornelis
  • 增加该值(如果存在),否则在 DynamoDB 中添加新条目

    我有一个 DynamoDB 表 其列和主键为ipAddress IP地址 visits 我从我的 React 网站获取用户的 IP 地址 并通过 Lambda 函数和 API Gateway POST 请求将其插入到 DynamoDB 如果