我目前正在使用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)排序,如何实现分页,以及我们如何允许用户一次跳转多个页面?
任何提示都会非常感谢,谢谢!
答案 0 :(得分:1)
评论是正确的,除非你知道你会有很多文件,否则你应该没事。但是,即使你没有多少期望,但是获得了巨大的成功/受欢迎,你也不希望你的代码被破坏,只是它被数百万用户使用。
如果您按日期排序,然后按ID排序,则可以执行以下操作:
.find(
{
date:{
$lte:lastDate
},
_id:{
$lt: lastId
}
}
).limit(n)