MongoDB,sort()和分页

时间:2012-12-16 17:36:54

标签: mongodb sorting pagination

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

更新

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

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

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

1 个答案:

答案 0 :(得分:1)

我在试图抓住你的问题时遇到了很大的问题。

从用户刷新页面时我可以看出,比如6小时之后,它不仅应该显示那里的结果,还应该显示现在的结果。

正如@JohnnyHK所说,MongoDB自然地“实时”排序,因此情况就是如此,MongoDB会为你的查询提供正确的结果。

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

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

修改

啊哈,我想我看到你现在想要做什么,你试图通过同时获取页面和列表中的最后一项来偷偷摸摸。不幸的是,就像SQL一样,这是不可能的。即使排序工作得那样,排序也不会像它那样起作用,因为你只能对单个字段进行单向排序。

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

我担心这必须通过两个查询来完成,所以你首先得到你的页面然后客户端(我认为你在寻找那个页面的最大值)滚动记录以找到最后一个{{1}或者只是做第二个查询来获取最后一个_id。它应该是超级快速的。