提问者:小点点

DynamoDB-扫描不返回所有项目


node.js函数中扫描dynamodb中的表时,我面临一些麻烦。

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

遵循以下代码:

使用SAWS扫描功能:

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文档。

有谁知道这个问题的确切解决办法吗?


共1个答案

匿名用户

假设所有3条记录实际上都满足筛选条件,您应该检查响应的LasteValuatedKey属性。

尽管涉及的项目数量很少,但并不能保证scan操作会在第一个响应中返回所有匹配的元素。 合同内容为:

  • 如果:LasteValuatedKey为空,则您位于结果的最后一页
  • else:您需要使用参数ExclusiveStartKey重复扫描操作,以便继续扫描。

更多信息请访问官方文档。