我目前正在使用 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
.
所以我的问题是,如果我们按非唯一字段(例如日期或名字)排序,如何实现分页,以及如何允许用户一次跳转多个页面?
任何提示将不胜感激,谢谢!
最佳答案
评论是正确的,你应该可以跳过,除非你知道你将有很多文档。但是,即使您期望不高,但随后获得巨大成功/流行,您也不希望您的代码被破坏,只是因为它被数百万用户使用。
如果先按日期排序,然后按 ID 排序,您可以执行以下操作:
.find(
{
date:{
$lte:lastDate
},
_id:{
$lt: lastId
}
}
).limit(n)
关于javascript - MongoDB - 使用范围查询进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47564093/