【问题标题】:How can I tell if there are more results from a query in MongoDB?如何判断 MongoDB 中的查询是否有更多结果?
【发布时间】:2011-03-31 21:01:55
【问题描述】:

有没有一种首选的方式来查询带有限制的 mongo 并知道如果我用跳过/限制查询下一页是否会有更多结果?

我一直在做的是要求比我需要的多一个文档,将其从末尾切片,并使用该额外文档的存在来了解另一个查询是否会给出至少一个以上的结果。

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

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

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我不确定 pymongo,但 Java 绑定确实提供了一个名为 cursor.count() 的函数。此方法返回总文档而不考虑限制。使用它,就不需要获取额外的文档。只要 (cur.count() > n) 就可以了。
    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2018-02-02
    • 2013-09-03
    相关资源
    最近更新 更多