【问题标题】:How do I use batchWriteItem with Node.js to query AWS DynamoDB?如何使用带有 Node.js 的 batchWriteItem 来查询 AWS DynamoDB?
【发布时间】:2019-01-21 22:00:01
【问题描述】:

我是 AWS 新手,尝试使用 Node.js 开发简单的 Lambda 函数时遇到问题。在 DynamoDB 中,我有一个名为 Game 的表,它具有 3 个属性:gamepk、user、result。 在 Lambda 函数的一次执行中,我想插入一组 game 元素(集合中的元素数量可能会有所不同)。 我一直在阅读一些教程,它说我应该使用batchWriteItem,但由于游戏元素的集合是可变的,我不知道如何继续。

有人可以在 Node.js 中编写一个函数来解决我的问题吗?

lambda 函数接收的 JSON 示例如下:

    {
        "games": [{
                "gamepk": "1",
                "user": "rolo",
                "result": "1-0"

            },
            {
                "gamepk": "2",
                "user": "jhon",
                "result": "1-1"
            }
        ]
    }

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    这应该可以满足您的需求。

    1. 创建新的 Lambda 函数
    2. 选择节点版本 6
    3. 选择一个角色或创建一个具有 DynamoDB 写入权限的新角色!
    4. 在 Web 控制台中打开创建的函数
    5. 将 Snippet Bellow 粘贴到 Cloud 9 编辑器中

      const AWS = require('aws-sdk/global');
      
      exports.handler = (event, context, callback) => {
      // The event parameter is the input to your lambda function
      console.log(JSON.stringify(event));
      let lambdaInput = event['PROPERTY_NAME_DEFINED_IN_POST'];
      let games = [];
      let documentClient = new AWS.DynamoDB.DocumentClient();
      
      lambda.forEach(item => {
        games.push({
          PutRequest: {
            Item: {
              gamepk: item['gamepk'],
              user: item['user'],
              result: item['result']
            }
          }
        });
      });
      
      let params = {
          RequestItems: {
              'TABLE_NAME': games
          }
      };
      
      documentClient.batchWrite(params, function(err, data) {
          if (err) {
              callback(err);
          } else {
              callback(null, data);
          }
      });
      }
      

    保存函数,然后您将要选择顶部显示“选择测试事件”的下拉菜单,然后选择“配置测试事件”。

    这将打开一个新对话框,只需保存主文本区域中的 JSON 并为测试命名并保存它。

    现在从“选择测试事件”下拉菜单中选择您刚刚进行的测试,然后点击右上角的“测试”。

    可以在AWS Javascript SDK找到此文档

    【讨论】:

    • 非常感谢您的回答,它成功了!但是有一件事我不理解,也许我在我的问题中没有很好地解释(我的英语不好)。 lambda 函数由 api 网关“激活”,当有人想在表“游戏”中插入某些内容时,它会发送一个带有 JSON 集合的 POST。看到你的答案,就像你的函数只插入两个元素。你能告诉我如何修改函数以接收 JSON 中的集合并同时插入所有元素吗?。
    • 我已经更新了 lambda 函数以满足您的需求,如果适合您,请标记为正确。
    【解决方案2】:

    作为answer 的附加帮助,您可以使用环境变量并按以下方式使用它:

    const MI_TABLE = process.env.MI_TABLE
    
      let params = {
          RequestItems: {
               [ MI_TABLE ] : games
          }
      };
    
    return await batchWrite(params);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2022-07-08
      • 2019-09-26
      • 1970-01-01
      相关资源
      最近更新 更多