【问题标题】:DynamoDB query on GSI returns null with nodeJsGSI 上的 DynamoDB 查询使用 nodeJs 返回 null
【发布时间】:2020-11-30 23:52:51
【问题描述】:

我正在尝试使用全局索引查询发电机表,但由于某种原因它返回 null。我确实有一条记录,我可以从控制台查询,但不能使用 node js sdk。

这是我的代码:

try {
    var queryParams = {
      IndexName: "gsi1-index",
      KeyConditionExpression: "gsi1 = :gsi1",
      ExpressionAttributeValues: {
        ":gsi1": userEmail,
      },
      TableName: usersTable,
    };
    await ddb.query(queryParams, (err, userData) => {
      // if (err || userData.Count === 0)
      //   return res.status(400).json({ data: "No information was found" });
      return res.status(200).json(userData);
    });
  } catch (err) {
    return res.status(400).json(err);
  }

我不知道我到底做错了什么?到处搜索,但我的代码与其他代码和所有示例完全相同

【问题讨论】:

  • 您能否更新问题并添加表的键架构、GSI 和您应该检索的项目示例?
  • 当您说“它不起作用”时,您是否收到错误、空结果或其他问题?
  • @Andre.IDK gsi 是我表中索引/属性的名称。这是我正在运行的确切代码
  • @SethGeoghegan 我得到了空回

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


【解决方案1】:

您尚未发布完整的代码示例,但我冒险猜测一下。我假设您正在使用 DDB DocumentClient API 在异步 lambda 中运行此代码。

问题似乎是您同时使用await 和回调。

   await ddb.query(queryParams, (err, userData) => {
      return res.status(200).json(userData);
    });

试试这个

let data = await ddb.query(queryParams).promise();
// do something with data

【讨论】:

  • 这就是问题所在。我缺少索引表本身的 IAM 角色。我忘记了 gsi 创建了一个新表,我需要一个 iam 角色。老实说,您的方式帮助我调试了问题!请更新答案,以便我将其标记为正确。还有你更愿意走哪条路?回调还是 let data = promise?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
相关资源
最近更新 更多