【问题标题】:mongo sorting with paginationmongo 分页排序
【发布时间】:2016-02-06 08:26:14
【问题描述】:

我需要在我的mongodb 集合中实现分页。这是我收藏中的文档示例

{
  "_id" : "<Mongo Generated>",
  "category" : "abc",
  "createdDate" : "<Date of creation of the document>",
  "markedDate" : "<Date when the document is marked 
               (marking is an activity that is done via my application>"
}

这是我的要求:

  1. 我需要检索“abc”类别中的所有文档,但是每页包含 10 个文档
  2. 只有在文档排序后才能进行分页 - 我必须先按 markedDate(降序)对文档进行排序,然后是 createdDate(降序)
  3. 应应用 10 个结果的限制
  4. 我应该能够根据输入中的页码跳到任何页面

我尝试执行以下查询以使用聚合对结果进行排序:

db.getCollection('testcollection').aggregate(
   {$match:{"category" : "abc"}}, 
   {$sort:{markedDate: -1, createdDate : -1}
})

但是,我该如何分页?我可以使用跳过 + 限制选项,但是在发布此问题之前我浏览了一些帖子,不建议将其用于大型数据集。我预计我的收藏有大约 75000 个文档。

此外,由于我的日期是以 ISO 日期格式存储的,因此我发现可见性仅为秒级。我可能同时创建了 2 个文档。

在不影响性能的情况下分页结果的最佳方式是什么?

请指教。

【问题讨论】:

    标签: mongodb sorting paging


    【解决方案1】:

    直接使用排序函数怎么样

    db.testcollection.find({}).sort({createdDate:-1}).skip(1).limit(10)
    

    【讨论】:

    • 感谢您的回复。但是,根据 Mongo 文档,对大型集合使用跳过会导致性能下降。我正在寻找避免这种情况的选择。我正在寻找避免这种情况的选择。有什么选择吗?
    • 感谢您的回复。但是,根据 Mongo 文档,使用 skip 会导致大型集合的性能下降。
    • 如果你有大量的集合并且你想要一个超过 100/10000 的页面,它不仅仅是 mongo,它的开销让数据库首先获取 n 跳过 + 限制,然后丢弃跳过计数以显示最后限制数量。
    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 2013-01-13
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多