3

我在尝试实现以下目标时遇到问题:

我想要一个具有“无限”滚动功能的页面,并且所有获取的结果都按某些属性进行排序。代码当前的工作方式是放置查询、对结果进行排序并显示它们。问题是,一旦用户到达页面底部并放置了新查询,此查询的结果就会被排序,但在它自己的上下文中。也就是说,如果您总共有 100 个结果,而第一个查询只显示 50 个,那么它们会被排序。但是下一个查询(对于接下来的 50 个)仅根据这 50 个结果对结果进行排序,而不是基于 100 个(总结果)。

那么,我是否必须一次获取所有结果,对它们进行排序,然后对它们应用一些分页逻辑,或者 MongoDB 是否可以通过对结果进行排序来实际进行无限滚动(AJAX 请求)?

4

2 回答 2

3

使用 MongoDB 有几种方法可以做到这一点。您可以使用.skip()and.limit()命令(在此处记录:http ://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-CursorMethods )将分页应用于查询。

或者,您可以在查询中添加一个子句,例如:{sorted_field : {$gt : <value from last record>}}。换句话说,过滤掉排序值小于当前结果页中最后一个结果项的查询的匹配项。例如,如果结果的第 1 页返回文档 A 到 D,那么要检索下一页 2,您使用附加的 filter 重复相同的查询x > D

于 2012-04-30T14:31:40.640 回答
1

让我先说我没有使用 MongoDB 的经验(尽管我知道它是一个 NoSQL 数据库)。

然而,这个问题在某种程度上是一个通用的数据库问题(您可能会得到更多的回复来标记它)。我已经使用 Cassandra(另一个,虽然完全不同的 NoSQL 数据库)实现了这样的功能,但是同样的原则也适用。

使用最后检索到的记录的 sorted-by 属性,并根据它在数据库中进行范围搜索。因此,假设您的数据库包含以下一组字母:

A
B
C
D
E
F
G

..你一次检索 2 个字母,你会A, B先检索。当需要更多记录时,您可以使用 B 对数据库中的字母集进行范围搜索。用简单的英语来说,这将是这样的:

获取后面出现的字母,B将结果限制为 2

简要看一下 MongoDB 教程,您似乎有条件运算符来帮助您实现这一点。

于 2012-04-30T13:43:16.760 回答