2012-06-05 36 views
7

當在MongoDb中執行查詢時,我需要獲得所有匹配的總數以及文檔本身作爲有限/分頁子集。mongodb得到計數沒有重複發現

我可以通過兩個查詢來實現目標,但我沒有看到如何用一個查詢來做到這一點。我希望有一個mongo特性,在某種意義上等同於SQL_CALC_FOUND_ROWS,因爲看起來像是矯枉過正必須運行查詢兩次。任何幫助都會很棒。謝謝!

編輯:這裏是執行以上操作的Java代碼。

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

回答

3

我不知道你使用的語言,但你通常可以調用光標這是一個find查詢的結果,然後使用相同的光標來獲得文件本身一個count方法。

+0

感謝您的幫助,它就像一個魅力。我使用的是Java,遊標有一個計數方法。 – adamSpline

+7

這是不正確的。這個問題問如何用一個*查詢*來做到這一點。使用'cursor.count()'實際上只是將第二個查詢委託給客戶端驅動程序,但第二個查詢仍然執行。 – Raman

2

這不僅矯枉過正,而且還存在不一致的風險。這兩個查詢之間的集合可能會發生變化,或者每個查詢都可能路由到副本集中的不同對等方,副本集中可能具有不同版本的集合。

遊標上的count()函數(在MongoDB JavaScript shell中)確實會運行另一個查詢,您可以通過鍵入「cursor.count」(不帶圓括號)來看到它,因此它不會比運行兩個查詢更好。

在C++驅動程序中,遊標甚至沒有「count」函數。有「itcount」,但它只循環遊標並獲取所有結果,這不是你想要的(出於性能原因)。 Java驅動程序也有「itcount」,那裏的文檔說它只能用於測試。

似乎沒有辦法一貫而有效地進行「找一些並獲得總數」。