3

我正在构建一个从 MongoDB 调用数据的应用程序。出于这个问题的目的,假设用户在我的应用程序中搜索某个查询,而 MongoDB 有 4,000 个与该查询匹配的结果要吐出。

在阅读了一下之后,我发现可以使用该.skip()方法进行分页,但是 MongoDB 自己建议不要使用它,因为它需要光标遍历所有记录,直到您要跳到的那个,这越来越多你去的列表中越高越贵。

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

谁能想到一种方法来做到这一点,或者是skip()这里唯一的选择?

其他注意事项:

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

4

1 回答 1

4

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

MongoDB 范围分页也有一个很好的例子。

于 2013-07-12T09:31:47.753 回答