0

我有一个包含数千个数据的DynamoDb表。我使用扫描功能扫描表格,并且已应用“之间”FilterExpression。 但是,查询响应仅给出3条记录,而它应该返回约100条记录。DynamoDb:扫描查询不会返回所有数据

我已经使用Node js创建了Lambda函数。

+1

最可能的原因是过滤器表达式过滤掉一些值。在这种情况下,DynamoDB仍然必须扫描整个表和页面的结果。每个响应将仅包含与过滤条件匹配的项目以及您在下一个请求中必须包含的LastEvaluateKey以继续扫描。起初这有点不直观,但如果你多想一点,这是有道理的。 –

回答

3

另一个常见问题可能是扫描是否被执行直到LastEvaluatedKey为空。

如果您已经在做这件事,但仍未获取所有项目,请显示您的代码以详细查看它。

如果扫描的物品的总数目超过最大数据集大小 极限的1 MB,扫描停止,结果返回给用户,作为 一个LastEvaluatedKey值继续在随后的 操作的扫描。结果还包括超出 限制的项目数量。扫描可能导致没有符合过滤标准的表格数据。

如果LastEvaluatedKey为空,则处理结果的“最后一页”已经处理了 ,并且没有更多数据需要检索。

如果LastEvaluatedKey不为空,则不一定意味着 结果集中有更多数据。要知道何时 已达到结果集的末尾,唯一方法是当LastEvaluatedKey为空时为 。

+0

谢谢。上述解决方案工作。 – Sumera

0

这里的示例代码来获取所有的结果:

Map<String, AttributeValue> lastKeyEvaluated = null; 
    do { 
     ScanRequest sr = new ScanRequest() 
       .withTableName("tableName") 
       .withProjectionExpression("id") 
       .withExclusiveStartKey(lastKeyEvaluated); 
     ScanResult result = client.scan(sr); 
     for (Map<String, AttributeValue> item : result.getItems()) { 
      System.out.println(item.get("id").getS()); 
     } 
     lastKeyEvaluated = result.getLastEvaluatedKey(); 
    } while (lastKeyEvaluated != null); 
+0

请在您的回答中添加一些说明。 – not2qubit