在mongodb字段上排序分页时出现问题

zpgglvta  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(514)

我有一个集合,我想通过使用datecreated字段将其排序为decenting来进行分页查询,以获取最新文档。
我等着呢 lastKnownCommentId (对象id)用于性能目的。有 lastKnownCommentId 避免在下次分页时再次加载文档,如果没有,则应用 limit on查询将导致性能问题。

  1. Query<Comment> query = datastore.createQuery(Comment.class)
  2. .field(POST_ID).equal(postId);
  3. if (lastKnownCommentId != null) {
  4. query.field(FieldConstants.OBJECT_ID).greaterThan(new ObjectId(lastKnownCommentId));
  5. }
  6. query.order(Sort.descending(FieldConstants.DATE_CREATED));
  7. return query.asList(new FindOptions().limit(10));

现在我有12个文件在这个集合中,其中一个匹配 postId . 当此查询在第一次分页时 lastKnownCommentId=null 它给了我10个文件按日期排序,2个文件仍然没有在分页图片。
用于第二个分页 lastKnownCommentId=someId (someid是从第一页获取的最后一个文档的对象id),它再次给出9个文档作为结果,而不是第一页中保留的2个文档。
如果我不按日期排序,我可以完全跳过这个排序,改为按数组列表排序。我不明白为什么在查询中排序会发生这种情况。
我试图交叉检查聚合和结果相同的输出。

  1. db.comment.aggregate(
  2. // Pipeline
  3. [
  4. // Stage 1
  5. {
  6. $match: {
  7. "postId":{"$eq":"5fb2090fe4d37312a4c3ce59"}
  8. }
  9. },
  10. // Stage 2
  11. {
  12. $sort: {
  13. "dateCreated":-1
  14. }
  15. },
  16. // Stage 3
  17. {
  18. $match: {
  19. "_id":{"$gt":ObjectId("5fb0e53392ad724f9026d2f7")}
  20. }
  21. },
  22. // Stage 4
  23. {
  24. $limit: // positive integer
  25. 10
  26. },
  27. ],
  28. // Options
  29. {
  30. cursor: {
  31. batchSize: 50
  32. }
  33. }
  34. );
lymgl2op

lymgl2op1#

是什么 query 看起来像是在你还它之前(打印出值,如果是对象,则执行for循环,这样您就可以看到值是什么)。

相关问题