【问题标题】:Page / Slice containing unknown instances in spring's pagination and slicing over mongodb页面/切片在spring的分页中包含未知实例并在mongodb上切片
【发布时间】:2017-12-21 20:14:21
【问题描述】:

当尝试使用 spring 的分页或切片来迭代一个非常大的 mongodb 集合时,程序运行正常,但在某些时候下一页/切片是空的,并且在调试中有“页面/切片包含未知实例”的消息.

这是代码示例:

do {
  Pageable pageable = new PageRequest(pageNumber, PAGE_SIZE, sort);
  nextPage = catsRepository.findByTypeAndIdGreaterThan("street cat", lastId, 
          pageable);
  dbRecords = nextPage.getContent();
   if (dbRecords.size() > 0) {
       lastId = new ObjectId( doSomthing());
       pageNumber++; 

    }
 } while (nextPage.hasNext());

另外,当使用不同的页面大小时,问题的位置似乎不同:

使用大小为 1 的切片运行后,切片 133 出现问题

使用大小为 2 的切片运行后,切片 98 出现问题

使用大小为 3 的切片运行后,切片 76 出现问题

数据库中是否存在可能导致此问题的格式错误的文档?

在迭代过程中,我计算了预期的切片/页数,并且循环在达到该数字之前停止。

什么会导致这样的事情?

谢谢。

【问题讨论】:

    标签: java spring mongodb pagination slice


    【解决方案1】:

    通常,当您请求“超出范围”的 pageNumber 时会发生这种情况。 假设你在 db 中有 10 个你想要的寄存器,并且你定义了一个 PAGE_SIZE=10,那么你只有一页并且它的索引是 0,这意味着如果你请求 pageNumber=1,你会得到包含未知实例的问题。

    总结一下,试试pageNumber=0

    【讨论】:

      【解决方案2】:

      问题是我同时使用了 _id 排序和增加请求的页码。

      一旦我一直请求页码 0,问题就结束了。

      【讨论】:

      • 你知道为什么spring会有这种行为吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2015-05-21
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      相关资源
      最近更新 更多