我正在尝试运行查询并获取所有项目。似乎并非所有项都被检索,我需要使用开始键再次运行查询。
来自文档
对于查询或扫描操作,如果操作未返回表中的所有匹配项,DynamoDB可能会返回LastEvaluatedKey值。要获取匹配项的完整计数,请从上一个请求中获取LastEvaluatedKey值,并将其用作下一个请求中的ExclusiveStartKey值。重复此操作,直到DynamoDB不再返回LastEvaluatedKey值。
你能给出一个代码示例,说明如何使用lastEvaluatedKey包装此代码以再次运行查询吗?
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("userName = :userName and #a between :startRange and :endRange")
.withValueMap(valueMap)
.withScanIndexForward(false)
.withNameMap(nameMap);
ItemCollection<QueryOutcome> items = table.query(spec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) { ....
谢谢, 弗雷迪
答案 0 :(得分:0)
看起来您使用的是DynamoDB Document API而不是低级API。使用Document API querying时,会考虑所有低级别考虑因素(如分页),但您可以选择与这些较低级别的方面进行交互。
根据您提供的代码段,当您到达每个页面的末尾时,Document API库将负责在其他页面中加载,因此您无需执行任何额外操作,您的代码应该正常工作!这是使用Document API的真正好处,因为它为常见用例处理了大量冗余锅炉板代码。