dynamodb查询获取超过1米的数据 - 请参阅java中的示例

时间:2016-02-12 18:30:27

标签: java amazon-dynamodb

我正在尝试运行查询并获取所有项目。似乎并非所有项都被检索,我需要使用开始键再次运行查询。

来自文档

  

对于查询或扫描操作,如果操作未返回表中的所有匹配项,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()) { ....

谢谢,   弗雷迪

1 个答案:

答案 0 :(得分:0)

看起来您使用的是DynamoDB Document API而不是低级API。使用Document API querying时,会考虑所有低级别考虑因素(如分页),但您可以选择与这些较低级别的方面进行交互。

根据您提供的代码段,当您到达每个页面的末尾时,Document API库将负责在其他页面中加载,因此您无需执行任何额外操作,您的代码应该正常工作!这是使用Document API的真正好处,因为它为常见用例处理了大量冗余锅炉板代码。