DynamoDB Java v2 sdk 的 QueryEnhancedRequest 中的 Limit 方法未按预期进行限制

Par*_*ani 6 java amazon-dynamodb dynamo-local dynamodb-queries amazon-dynamodb-local

我正在使用 v2 aws DynamoDV Java sdk,并且我想限制通过分区键查询时返回的结果数量(下面的代码片段),但下面的代码返回完整的项目集。

java 文档说“注意:限制不是指要返回的项目数,而是指数据库在执行查询时应评估的项目数。在后续查询调用中将 limit 与 Page.lastEvaluatedKey() 和 ExclusiveStartKey 一起使用来评估限制每次调用的项目。” 这似乎支持我所看到的行为。

但是,如何使用 Java 设置 DynamoDB 返回的匹配项的限制?在早期版本的 sdk 中有使用 .withMaxResultSize 方法的解决方案。

java dynamodb v2 skd 是否有类似的东西,或者我必须手动限制结果集?代码如下:

QueryConditional conditional = QueryConditional.keyEqualTo(
                Key.builder()
                        .partitionValue(jobId)
                        .build()
        );
QueryEnhancedRequest request = QueryEnhancedRequest.builder()
                .queryConditional(conditional)
                .limit(1)
                .scanIndexForward(false)
                .build();

Run Code Online (Sandbox Code Playgroud)

Gop*_*kla 3

请阅读https://github.com/aws/aws-sdk-java-v2/issues/1951

您需要限制从 iterable 返回的页面数。例子

PageIterable<MyMovie> myMovie = moviesTable.query(queryEnhancedRequest);

myMovie.items()
        .stream()
        .limit(2)
        .forEach(content -> System.out.println(" Movie: %s (%s) \n", content.title, content.year));
Run Code Online (Sandbox Code Playgroud)

如果您在 queryEnhancedRequest 中设置 limit(1),这将获取 2 个页面,并且每个页面将有 1 个项目