2014-01-15 31 views
1

我有一個關於在mongodb中的性能的問題。基本上我們假設我們有一個我們想查詢的名爲items的集合。當然,我將限制查詢,以便在單個頁面加載期間不要檢索太多東西。像這樣的事情會這樣做:在限制它前計算一個mongodb光標的結果

db.items.find(/* some condition */).sort({ timestamp : -1 }).limit(10); 

這是一個典型的例子。所以我通常從MongoDB的網站上直接獲取它。哈哈哈!

現在真正的問題是:在限制/排序遊標中包含的數據之前,我可以對遊標中包含的所有數據進行全局計數嗎?就像這樣:

var curs = db.items.find(/* some condition */); 
curs.count(); // is this a resource consuming operation??? <<< 
curs.sort({ timestamp : -1 }).limit(10); 

或者是它成爲一個沉重的負荷運行相配套的find的標準生長結果的數量?

感謝

回答

1

在(大多數)的MongoDB驅動計數方法實際上將沒有跳躍和限制默認計數。

它實際上是一個附加參數true,它使它與跳過和限制計數。

同樣,你可以做一個全局計數,即使在跳過和限制之後。

但是,值得注意的是,在MongoDB中進行計數實際上會執行一次計數,即使已經進行了大量的改進以提高計數速度,但它們的代價仍然非常高。

這取決於你的數據的大小,但如果你在結果中有100,000個行的區域,你不應該面對太多的問題。

+0

好,所以答案是:是! 'count'確實會降低性能,但不會太多,如果應用程序不會變得太大,可以安全地使用它。正確? – nourdine

+0

@nourdine正確:) – Sammaye