DynamoDB - 扫描未返回所有项目

3

我在使用Node.js函数扫描DynamoDB表时遇到了一些问题。

当我在函数中进行扫描时,我得到了2行数据,但是在AWS控制台中进行扫描时,我得到了3行数据。

以下是代码:

utilsAWS扫描函数:

scanDocuments(params) {
    return new Promise((resolve, reject) => {
      var docClient = new this.AWS.DynamoDB.DocumentClient();

      console.log(`Querying ${params.TableName}...`);

      docClient.scan(params, function (err, data) {
        if (err) {
          console.error(
            "Unable to query. Error:",
            JSON.stringify(err, null, 2)
          );
          return reject(err);
        } else {
          console.log("Query succeeded.");
          return resolve(data.Items);
        }
      });
    });
  }

//消费扫描功能

var params = {
    TableName: 'minha-redacao-redacoes',
    FilterExpression: "#e = :cpfAluno",
    ExpressionAttributeNames: {
      "#e": "cpfAluno",
    },
    ExpressionAttributeValues: {
      ":cpfAluno": `8509754....`
    },
  };
  try {
    const res = await utilsAWS.scanDocuments(params);

    console.log(res.length); //2

  } catch(err) {
    console.error(err);
  }

然而看看AWS控制台:

通过控制台扫描

扫描node.js函数时未找到行ID:f3ebb776-13eb-4395-884e-e81f23044ca1。为了部分解决问题,我创建了f3ebb776-13eb-4395-884e-e81f23044ca1_manual文档。

有人知道这个问题的最终解决方案吗?


在您的代码示例中,您指定了ExpressionAttributeValues的值为8509754....,而您的屏幕截图显示为8509754(缺少点)。这是一个打字错误吗? - Tasos P.
1
我只是在这里隐藏了巴西文件的完整号码。数值是相同的。 - pedro.olimpio
1个回答

6

假设所有3条记录都符合过滤条件,你应该检查响应中的LastEvaluatedKey属性。

尽管涉及的项数很少,但是不能保证scan操作会在第一个响应中返回所有匹配的元素。其约定为:

  • 如果:LastEvaluatedKey为空,则您已到达结果的最后一页
  • 否则:您需要使用参数ExclusiveStartKey重复执行扫描操作,以恢复扫描。

更多信息请参见官方文档


好的!我会在这里检查这个选项... :D - pedro.olimpio
太棒了!它运行得像魔法一样!:D 非常感谢你! - pedro.olimpio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接