在没有依赖.skip()的情况下,分页导致MongoDB

时间:2013-07-12 04:12:56

标签: mongodb pagination

我正在构建一个从MongoDB调用数据的应用程序。出于这个问题的目的,假装用户在我的应用程序中搜索特定查询,并且MongoDB有4,000个结果与查询匹配。

在阅读了一下之后,我发现可以使用.skip()方法but MongoDB themselves suggest against using this进行分页,因为它需要光标遍历所有记录,直到你跳到的那个记录为止。在你去的列表中越高越贵。

我已经看到一些依赖于结果的_id属性的教程是顺序的,但这不适用于此 - 我的数据库有数万条记录,每条记录都有一个唯一的id ,适用于用户查询的4000个结果肯定不会是顺序的。

任何人都可以想到这样做的方法,或skip()这是唯一的选择吗?

其他考虑因素:

分页将根据页面上的位置起作用。例如,第一个查询应该向我的应用程序吐出20条记录。当用户滚动到页面底部时,我可能会获得页面上第20个元素的_id并将其传递给我的查询,在4,000个结果的列表中找到它,找到后续结果并开始从那里开始的下一组20。这样的事情是否可行,并且它会比skip()更少的CPU密集度?

1 个答案:

答案 0 :(得分:3)

“其他注意事项”中的诀窍只有在_id上添加排序时才有效,否则您无法保证后续查询的顺序。如果要对其他字段进行排序,则需要索引该字段。我还建议您查询 21 元素,这样您就不必返回并在20元素之后找到下一个元素(当然,您仍然只能显示前20个元素)。

MongoDB ranged pagination也有一个很好的例子。