DynamoDB扫描显示的项目少于DynamoDB控制台

时间:2019-05-07 16:53:33

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

为什么使用nodejs进行扫描仅显示3个结果,而dynamodb管理工具却显示9个结果

var params = {
    TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
    FilterExpression: '#blickArticleId = :valblickArticleId AND #firstFolder = :valfirstFolder',
    ExpressionAttributeNames: {
        '#blickArticleId': 'blickArticleId',
        '#firstFolder': 'firstFolder'
    },
    ExpressionAttributeValues: {
        ':valblickArticleId': 'null',
        ':valfirstFolder': 'null'
    },
  };

  const queryResponse = await dynamoDb.scan(params).promise()

不是一样的

enter image description here

3 个答案:

答案 0 :(得分:2)

您确定您扫描的内容不超过1MB吗?

  

如果扫描的项目总数超过最大数据集大小   限制为1 MB,扫描将停止并将结果返回给用户   带有LastEvaluatedKey

然后,您可以使用LastEvaluatedKey扫描其余项目。

答案 1 :(得分:1)

您的代码需要扫描其余项目。非空LastEvaluatedKey的存在表示DynamoDB结果是分页的。 AWS DynamoDB控制台大概正在为您做分页。

这是fetch all items if paginated的代码示例。

答案 2 :(得分:0)

jarmod提到分页是解决方案:

const getLalalalalal = async () => {
  var params = {
    TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
    FilterExpression: '#blickArticleId = :valblickArticleId AND #firstFolder = :valfirstFolder',
    ExpressionAttributeNames: {
        '#blickArticleId': 'blickArticleId',
        '#firstFolder': 'firstFolder'
    },
    ExpressionAttributeValues: {
        ':valblickArticleId': 'null',
        ':valfirstFolder': 'null'
    },
  };

  return await scanTable(params)
}

const scanTable = async (params) => {
  let scanResults = [];
  let items;
  do {
      items = await dynamoDb.scan(params).promise();
      items.Items.forEach((item) => scanResults.push(item));
      params.ExclusiveStartKey = items.LastEvaluatedKey;
  } while(typeof items.LastEvaluatedKey != "undefined");

  return scanResults;
};