如何判断MongoDB中的查询结果是否更多?

时间:2010-08-19 00:29:08

标签: mongodb pymongo

有没有一种首选方法来查询具有限制的mongo,并知道如果我使用skip / limit查询下一页是否会有更多结果?

我一直在做的是要求一个比我需要的更多的文档,将它切成末尾,并使用该额外文档的存在来知道另一个查询是否会给出至少一个结果。

n = 10
docs = db.documents.find({'foo': 'bar'}).limit(n+1)
more = docs.count() > n
docs = docs[:n]

我觉得这是一个常见的用例(知道是否在网站上显示“更多结果”按钮),我对目前的解决方案感到愚蠢。

1 个答案:

答案 0 :(得分:3)

MongoDB有tailable cursors,允许您在返回所有数据后重用游标。它看起来像这样:

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()

请注意,只检索了10个文档,但可以检查光标以确定是否有更多可用对象。唯一的问题是,tailable游标只能用于上限集合。

以上也可以与常规游标一起使用,但您必须查询n + 1文档。这与您现在使用的解决方案基本相同。但是,您必须使用size(),因为这会考虑跳过和限制修饰符。

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n

我不熟悉PyMongo,所以我不确定这一点,但是这个解决方案有可能将n + 1个完整文档发送到您的应用程序,而不是所需的n,导致较小的带宽开销。如果是这种情况,您可能希望创建一个执行相同操作的服务器端函数,但只返回一个包含数组中n个文档的对象,以及一个指示n + 1 文件可用。