如果密钥不存在,如何插入到 DynamoDb

2024-04-02

我想将 id + 一些值添加到 DynamoDb 一次。如果 id 已经存在,则不执行任何操作或更新

我可以和

search 

if not found > insert

if found > do nothing or update (for now do nothing is fine)

但希望有更好的方法来做到这一点。 id 应该是要检查的密钥。

这是节点中的代码:

const dynamodbParams = {
        TableName: process.env.DYNAMODB_TABLE_BLICKANALYTICS,
        Item: {
          id: userId,
          createdAt: timestamp
        },
      };

      dynamoDb.put(dynamodbParams).promise()
      .then(data => {
        console.log('saved: ', dynamodbParams);
      })
      .catch(err => {
        console.error(err);
      });  

我在 yml 中使用这个。不知道yml中是否有设置的选项

resources:
  Resources:
    DynamoDbTableExpenses:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
          -  
            AttributeName: createdAt
            AttributeType: N
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
          -
            AttributeName: createdAt
            KeyType: RANGE            
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.DYNAMODB_TABLE_BLICKANALYTICS}


你可以用一个来完成整个事情更新项 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#updateItem-property手术:

const dynamodbParams = {
    TableName: process.env.DYNAMODB_TABLE_BLICKANALYTICS,
    Key: {id: userId},
    UpdateExpression: 'SET createdAt = if_not_exists(createdAt, :ca)',
    ExpressionAttributeValues: {
        ':ca': {'S': timestamp}
    }
};
dynamoDb.updateItem(params, function(err, data) {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
    }
}

如果您只想在不存在时插入,您可以轻松地使用PutItem https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property:

const dynamodbParams = {
    TableName: process.env.DYNAMODB_TABLE_BLICKANALYTICS,
    Item: {
        id: userId,
        createdAt: timestamp
    },
    ConditionExpression: 'attribute_not_exists(id)'
};
dynamodb.putItem(params, function(err, data) {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
    }
}

您可以通过组合以下方式想出更复杂的方法来设置或更新项目中的属性:条件表达式 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html and 更新表达式 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html.

注意我还没有完全测试代码,所以如果有任何错误请评论,但它应该可以工作。

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

如果密钥不存在,如何插入到 DynamoDb 的相关文章

随机推荐

  • stringbuilder 调用中的 Java 字符串连接

    据我所知 StringBuilder 在连接期间不在字符串池中创建临时字符串实例 从而有助于减少内存使用量 但是 如果我这样做会发生什么 StringBuilder sb new StringBuilder bu sb append b u
  • Meteor - 设置文档标题

    有没有办法改变
  • 如何自动测试基于浏览器的应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果它是一个Windows程序 我会使用Auto it http www autoitscript com autoit3 index s
  • R data.table 在导出函数中中断

    我在让 data table 在 roxygen2 导出函数中工作时遇到问题 这是一个名为 foo R 位于我的包的 R 目录中 的文件中的一个简单的假函数 它使用 data table Data table test function e
  • jQuery 验证(至少一个字段有文本)

    我的这个页面有几个 TextAreas asp net mvc 我需要验证这些字段中至少有一个包含文本 我怎样才能用 jQuery 做到这一点 这是我拥有的 textAreas 的一个示例 假设您没有使用验证插件并且所有文本区域都有 Esp
  • 在 Prolog 中编辑 Eliza 聊天机器人

    我一直在努力尝试在 Prolog 中编辑 Eliza 聊天机器人 每次我尝试编辑某些内容时 都会出现新的错误 它是否受到任何形式的编辑保护 我使用 SWI prolog 编辑器进行编辑 问题是我试图在没有完全理解代码的情况下最小化代码 我正
  • Java Eclipse 错误“未找到源。”

    我是编程世界的新手 我正在尝试编写一个简单的程序 从文件中读取并输出单个数字 我相信我在代码中设置了所有内容 我是否需要对 txt 文件的位置执行任何特殊操作才能使程序读取该文件 package pack import java util
  • 在Python中将十六进制值转换为RGB值

    在这里处理杰里米的回应 将十六进制颜色转换为 RGB 反之亦然 https stackoverflow com questions 214359 converting hex color to rgb and vice versa我能够获得
  • 接口是否位于继承链中?

    网上有两种说法Interface 那是陈述A 接口不属于继承链 其他声明B 接口可以继承其他接口 http msdn microsoft com en us library ms173156 28v vs 80 29 aspx 这两种说法是
  • NodeJS应用程序出现内存泄漏,它在哪里?

    我有一个 NodeJs 应用程序 它通过 Redis 服务器上的订阅来侦听消息 它会收集 5 秒的消息 然后将它们推送到连接的客户端 代码如下所示 io sockets on connection function socket nClie
  • 在 TypeScript 中实现接口原型

    我创建了一个TypeScript我的服务结果界面 现在我想为里面的两个函数定义一个基本功能 问题是我收到错误 Support 类型的值不存在属性 ServiceResult I use WebStorm为发展 VS2012让我紧张 因为大型
  • 如何合并两个数据框?

    我有一个初始数据框D 我从中提取两个数据帧 如下所示 A D D label k B D D label k 我想结合A and B到一个数据帧中 数据的顺序并不重要 然而 当我们采样时A and B from D 他们保留索引D 已弃用
  • 迭代 python 列表的最佳方法是什么,排除某些值并打印结果

    我是 python 新手 有一个问题 我检查过类似的问题 检查了教程深入Python 检查了 python 文档 googlebinging 类似的 Stack Overflow 问题和十几个其他教程 我有一段 Python 代码 用于读取
  • 创建 GSON 对象

    如何使用 Google Gson 创建 json 对象 以下代码创建一个 json 对象 如下所示 name john JsonObject jsonObject new JsonObject jsonObject addProperty
  • Varnish hit-for-pass 是什么意思?

    Varnish 版本 3 有一些用于不同操作的对象 例如 当它必须从后端检索数据时使用pass 当它在缓存中找到请求内容时使用hit 但我无法理解 hit for pass 的用法 Varnish什么时候使用它 我在网上没有找到任何有用的材
  • 当文件被删除并再次创建时,inotify 停止监视文件

    我在使用inotify时遇到一些问题 我使用 inotify 来监视文件的更改 这是我的代码 int fd inotify init int wd inotify add watch fd root temp IN ALL EVENTS i
  • 用于将 XML 内容解析为类的 LINQ 查询

    我有一个 xml 我试图通过 LINQ 查询从中提取一些信息 xml 文件的格式如下所示
  • 如何使用 pandas 中的自定义权重计算滚动平均值?

    熊猫文档http pandas pydata org pandas docs stable computation html http pandas pydata org pandas docs stable computation htm
  • 如何使用 .gitignore 忽略文件夹中的所有子文件夹

    我在 Git 中有一个文件夹 里面有一些文件 文件是我的 Git 存储库的一部分 运行我的项目时 一些工作目录会出现在该文件夹中 目录可以具有任何名称和任何具有多个子目录的嵌套级别 我想忽略此文件夹中出现的所有可能的子目录 但仍将所有文件
  • 如果密钥不存在,如何插入到 DynamoDb

    我想将 id 一些值添加到 DynamoDb 一次 如果 id 已经存在 则不执行任何操作或更新 我可以和 search if not found gt insert if found gt do nothing or update for