【发布时间】:2018-05-13 19:54:42
【问题描述】:
我目前正在使用 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。
所以我的问题是,如果我们按非唯一字段(例如日期或名字)排序,如何实现分页,我们如何允许用户一次跳转多个页面?
任何提示将不胜感激,谢谢!
【问题讨论】:
-
你在运行什么样的负载?除非您的数据库有数百万条记录,否则您不会注意到性能问题。不要使事情过于复杂......只需使用
find().skip().limit()。先让它工作,然后在你真正需要它时再优化它。
标签: javascript mongodb mongoose pagination