【问题标题】:MongoRepository paging request returning incorrect dataMongoRepository 分页请求返回不正确的数据
【发布时间】:2015-05-19 03:32:14
【问题描述】:

我对 Spring MongoRepository 有一个简单的分页请求,但 MongoRepository 显然在一些任意高页面之后开始发送不正确的结果#。我在这里发帖是想知道我是否遗漏了什么,或者这可能是 Spring MongoRepository 的一个错误。

在我的测试中,我的测试 mongo db 中有 14 个元素,并且以下分页请求工作正常(如果存在则检索数据): pageSize: 10, page#: 0 to 1073741823 但是下面的页面请求从我的 mongoDB 中返回了我不期望的 10 个实体: pageSize: 10, page#: 1073741824

pageSize 的 diff 组合的断点是 diff。有需要可以分享。

在我正在使用的库下方:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.5.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.12.5</version>
    </dependency>

存储库定义:

public interface SomeEntityRepository extends MongoRepository<SomeEntity, Integer> {
}

并使用以下存储库:

public Page<SomeEntity> getSomeEntitiesByPage(int pageIndex, int paseSize, Map<String, Sort.Direction> sortQuery) {

    Pageable pageableRequest = new PageRequest(pageIndex, pageSize);

        return someEntityRepository.findAll(pageableRequest);

}

【问题讨论】:

  • 在您的示例中,您只有 14 条记录,但您声称要查询“pageSize: 10, page#: 0 to 1073741823”。 '1073741823' 到底是什么 - 你能更具体一点吗?
  • @R4J:所以在示例中,page# 0 和 1 分别返回 10 和 4 个实体。并且第 2 页到 1073741823 没有返回任何内容,即 page.hasContent() = false 如预期的那样。但令人惊讶的是,对于第 1073741824 页到 Integer.MaxValue,它会返回 10 个实体,但它不应该这样做。
  • 哇.. 这很有趣。我刚刚用我的 spring-data-mongodb 应用程序尝试了同样的事情,并且对于 page# 1073741824 或更高版本发生了同样的事情。我猜对于大于 1073741824 的任何值,spring 数据会将 page# 重置为 0。我肯定会挖掘更多,我会发布我发现的内容。
  • 刚刚意识到 1073741824 等于 1GB 并且 = 2^30。根据docs.mongodb.org/manual/reference/limits,上限集合中的最大文档数有一个限制,即 2^32,是我们在这里达到的限制的 4 倍。
  • Jira 已被归档,结果证明与库有关,他们试图通过Pageable.getOffset() 获取偏移量,返回类型为 int,并且被环绕为负值。 Jira reference

标签: spring mongodb pagination spring-data-mongodb mongorepository


【解决方案1】:

这是 Spring MongoRepository 的一个问题,Jira 已为此提交。 MongoRepository 正在尝试获取所需的偏移量Pageable.getOffset(),返回类型为 int,当pageNumber*pageSize &gt; Integer.MaxValue 它被环绕为负偏移量时,导致第一页被检索。可以在 here 找到 Jira 参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多