【问题标题】:mongodb get count without repeating findmongodb获取计数而不重复查找
【发布时间】:2013-08-21 15:48:39
【问题描述】:

在 MongoDb 中执行查询时,我需要获取所有匹配项的总数,以及作为有限/分页子集的文档本身。

我可以通过两个查询来实现目标,但我不知道如何通过一个查询来做到这一点。我希望有一个 mongo 功能,在某种意义上,相当于 SQL_CALC_FOUND_ROWS,因为必须运行两次查询似乎有点矫枉过正。任何帮助都会很棒。谢谢!

编辑:这是执行上述操作的 Java 代码。

     DBCursor cursor = collection.find(searchQuery).limit(10);
     System.out.println("total objects = " + cursor.count());

【问题讨论】:

    标签: mongodb count


    【解决方案1】:

    我不确定您使用的是哪种语言,但您通常可以在游标上调用 count 方法,这是 find 查询的结果,然后使用相同的游标来获取文档本身。

    【讨论】:

    • 感谢您的帮助,它就像一个魅力。我正在使用 Java,并且游标有一个计数方法。
    • 这不太正确。该问题询问如何使用一个 query 来做到这一点。使用cursor.count() 实际上只是将第二个查询委托给客户端驱动程序,但第二个查询仍然执行。
    【解决方案2】:

    两次运行查询不仅矫枉过正,而且还存在不一致的风险。集合可能会在两个查询之间发生变化,或者每个查询可能会被路由到副本集中的不同对等点,这些对等点可能具有不同版本的集合。

    游标上的 count() 函数(在 MongoDB JavaScript shell 中)确实运行了另一个查询,您可以通过键入“cursor.count”(不带括号)看到这一点,所以它并不比运行两个查询好。

    在 C++ 驱动程序中,游标甚至没有“计数”功能。有“itcount”,但它只循环游标并获取所有结果,这不是你想要的(出于性能原因)。 Java 驱动程序也有“itcount”,那里的文档说它应该只用于测试。

    似乎没有办法持续有效地“找到一些并获得总数”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2019-07-24
      • 2018-01-06
      • 1970-01-01
      • 2016-07-13
      • 2019-09-10
      相关资源
      最近更新 更多