mongodb在不重复查找的情况下获取计数

mongodb在不重复查找的情况下获取计数,mongodb,count,Mongodb,Count,在MongoDb中执行查询时,我需要获得所有匹配项的总数,以及作为有限/分页子集的文档本身 我可以通过两个查询实现这一目标,但我不知道如何通过一个查询实现这一目标。我希望有一个mongo特性,从某种意义上说,它相当于SQL\u CALC\u FOUND\u行,因为必须运行两次查询似乎有些过分。任何帮助都会很好。谢谢 编辑:下面是执行上述操作的Java代码 DBCursor cursor = collection.find(searchQuery).limit(10); Sys

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

我可以通过两个查询实现这一目标,但我不知道如何通过一个查询实现这一目标。我希望有一个mongo特性,从某种意义上说,它相当于SQL\u CALC\u FOUND\u行,因为必须运行两次查询似乎有些过分。任何帮助都会很好。谢谢

编辑:下面是执行上述操作的Java代码

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

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

运行两次查询不仅过分,而且还存在不一致的风险。集合可能在两个查询之间更改,或者每个查询可能路由到副本集中的不同对等方,而副本集中可能有不同版本的集合

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

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


似乎没有办法始终如一地、高效地“找到一些并获得总数”。

感谢您的帮助,这很有魅力。我使用的是Java,游标有一个count方法。这不太正确。问题是如何用一个查询来完成。使用
cursor.count()
实际上只是将第二个查询委托给客户机驱动程序,但第二个查询仍在执行。