如何在mongodb中高效分页[重复]
Posted
技术标签:
【中文标题】如何在mongodb中高效分页[重复]【英文标题】:how to efficient paging in mongodb [duplicate] 【发布时间】:2016-11-22 22:23:51 【问题描述】:我想按字段x
对所有文档进行排序(多个文档可以在此字段上具有相同的值)。然后每次我按“下一步”时,它都会加载另外 10 个文档。
如果多个文档具有相同的值,则可以在其中任意顺序显示,没关系。
由于skip()
在大型数据集上效率低下,如何有效地做到这一点?不需要分页数,只需要无限滚动。
【问题讨论】:
【参考方案1】:如果您不需要分页数,那么您可以只使用单调递增的唯一 id
值;例如_id
和ObjectId()。
使用您的示例:
/* Value of first scroll record, and to be updated every iteration */
var current_id;
var scroll_size = 10;
db.collection.find(_id: $lt: current_id).
limit(scroll_size).
sort(
_id: -1,
x: 1 // Depending on your use case
);
上面的示例将为您提供最近的记录。根据您的用例,您必须决定如何处理新插入的文档。
如果您使用与_id
不同的字段来滚动浏览,请确保在该字段上添加适当的indexes。
【讨论】:
但这并没有给出按 x 排序的记录,对吧?这是按_id排序的 如您在sort()
的示例中所见,结果同时按_id
和x
排序。您也可以尝试 A)在匹配部分中包含 x
以及 _id
或 B)仅在匹配部分中使用“x”。 'x' 的值是多少?
@WanBachtiar 是的,它按x
排序,但如果按x
排序更改了顺序,这将不再正常工作,因为您的_id: $lt: current_id
不再有意义。以上是关于如何在mongodb中高效分页[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?
如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?