gpt4 book ai didi

java - 如何从 DynamoDBMapper query() 的分页结果中检索所有项目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:53 27 4
gpt4 key购买 nike

我正在尝试借助 DynamoDBMapper 查询 DynamoDB在 Java 中同时具有 hashKey 和 rangeKey。但我没有得到所有结果,它只返回其中的一部分。我的代码如下所示:

queryDynamoDb() {
Condition rangeKeyCondition = new Condition()
.withComparisonOperator(ComparisonOperator.GT.toString())
.withAttributeValueList(new AttributeValue().withS("0"));

DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(
new AttributeValue().withS(prefKey));

queryExpression.setRangeKeyCondition(rangeKeyCondition);

List<MyObj> myobjs = mapper.query(MyObj.class, queryExpression);
return myobjs;
}

MyObj 使用 DynamoDB 注释进行了正确注释。所以我能够保存对象,但检索只返回部分结果。

DynamoDBMapper查询 的文档说:

The query method returns the "lazy-loaded" collection. That is, initially it returns only one page of results. It makes a service call for the next page when needed.

现在的问题是,如何告诉映射器进行服务调用或需要一个页面,以便它加载所有页面(实际上是所有条目)?

最佳答案

Amazon DynamoDB 中的 Java 代码片段DynamoDBMapper Class 的文档这里有点不幸(虽然技术上是正确的),AWS SDK for Java API 文档 Class DynamoDBMapper在这方面(自然)更精确,请参阅方法 query() :

public <T> PaginatedQueryList<T> query(Class<T> clazz,
DynamoDBQueryExpression queryExpression)

所以返回的类型实际上是一个Class PaginatedQueryList :

Implementation of the List interface that represents the results from a query in AWS DynamoDB. Paginated results are loaded on demand when the user executes an operation that requires them. Some operations, such as size(), must fetch the entire list, but results are lazily fetched page by page when possible. [emphasize mine]

也就是说,在正常使用过程中你真的不需要显式加载任何东西,因为 PaginatedQueryList<T> 的延迟加载实现隐式地处理了它。 ;但是,如果出于某种原因需要,您可以通过需要访问整个集合的操作来触发它,并明确提到 size()。方法显然是其中之一。

关于java - 如何从 DynamoDBMapper query() 的分页结果中检索所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com