1

我知道已经有一些使用 mongo 的分页模式(在少数文档上跳过(),在许多文档上进行范围查询),但在我的情况下,我需要实时排序。

更新:

为了清楚起见,我将改变问题点。我可以这样查询吗:

db.collection.find().sort({key: 1}).limit(n).sort({key: -1}).limit(1)

要点是按“通常”顺序对查询进行排序,限制返回的数据集,然后通过排序将其反转以获得分页数据的最后一个索引。我尝试了这种方法,但似乎 mongo 以某种方式优化了查询并忽略了第一个 sort() 运算符。

4

1 回答 1

1

我在试图理解你的问题时遇到了很大的问题。

据我所知,当用户刷新页面时,比如 6 小时后,它不仅应该显示那里的结果,还应该显示现在的结果。

正如@JohnnyHK 所说,MongoDB 会自然地进行“实时”排序,这就是这种情况,而 MongoDB,因为您的查询会给您返回正确的结果。

现在我认为您可能试图在这里解决的一个问题(问题需要大量澄清)是由于数据更改,_id您最后看到的可能不再真正代表页码等,甚至不再代表信息的多样性,即你最后_id看到的实际上是第 13 页的一半。

这些事情你可能会花费更多的时间和性能来尝试解决,而不仅仅是让用户了解他们已经 AFAK 很长时间了。

编辑

啊哈,我想我明白了你现在想要做什么,你试图通过同时获取页面和列表中的最后一项来偷偷摸摸。不幸的是,就像 SQL 一样,这是不可能的。即使排序像那样工作,排序也不会像它应该的那样运行,因为您只能在单个字段上以一种方式排序。

但是,为了将来参考,该sort()函数正是游标上的函数,直到您通过开始迭代它来实际打开游标,sort()多次调用只会覆盖游标属性。

恐怕这必须通过两个查询来完成,因此您首先获取您的页面,然后是客户端(我认为您正在寻找该页面的最大值)滚动记录以找到最后一个_id或只是进行第二次查询得到最后一个_id。它应该是超级杜帕快。

于 2012-12-16T19:19:34.937 回答