7

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

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

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

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

2 回答 2

3

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

于 2012-06-05T01:44:14.417 回答
2

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

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

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

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

于 2013-08-21T07:48:39.973 回答