MongoDB - 使用远程查询进行分页

时间:2017-11-30 00:32:24

标签: javascript mongodb mongoose pagination

我目前正在使用MongoDB开发一个Web应用程序,它会在浏览器中填充内容页面。

我知道两种分页方法(见这里:https://scalegrid.io/blog/fast-paging-with-mongodb/):

1).skip() + .limit()

2).find({_id > last_id}).limit(n)

我理解第一个解决方案的性能问题,因此该选项不合适。

第二种解决方案效果很好,但前提是结果按_id排序。如果按非日期等非唯一字段排序,则可能有多个文档具有该日期,因此某些文档可能会从结果中排除。

此外,用户必须线性浏览页面,因为有一个last_id变量需要不断更新,并且由上一页的最后一个文档的_id确定。如果用户要从第1页跳到第7页,则第7页会显示针对第2页的结果,因为last_id将保留第1页最后一个文档中的_id

所以我的问题是,如果我们按非唯一字段(例如Date或firstName)排序,如何实现分页,以及我们如何允许用户一次跳转多个页面?

任何提示都会非常感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

评论是正确的,除非你知道你会有很多文件,否则你应该没事。但是,即使你没有多少期望,但是获得了巨大的成功/受欢迎,你也不希望你的代码被破坏,只是它被数百万用户使用。

如果您按日期排序,然后按ID排序,则可以执行以下操作:

.find(
  {
    date:{
      $lte:lastDate
    },
    _id:{ 
      $lt: lastId 
    }
  }
).limit(n)