2013-12-16 24 views
2

我有一個mongodb集合,如下所示: {color:'blue',category:'A', .....} {color:'yellow',category:'A',....} {color:'blue',category:'B',......} ... ....

db.collection.aggregate([{$ match:{color:'blue'}},{$ group:{_ id:「$ category」,num:{$總和:1}}}])

返回每個類別的顏色爲'blue'的文檔數量。

現在,我還想獲得每個類別中的文檔總數 - 在相同的聚合查詢中。這樣可以避免在非常大的數據庫上對mongodb服務器進行額外的查詢。因爲它是第一個查詢需要幾分鐘才能完成。添加另一個查詢將幾乎複製數據庫服務器的工作(再次分組和計數),因此需要更長的時間。 這可能嗎?

如果不是,是否有單個API調用來合併指定鍵字段上的兩個AggregationOutput結果?

謝謝。

+0

爲什麼爲你做(不'$ match')不只是組類別? – WiredPrairie

回答

0

這裏是如何做到這一點:

db.collection.aggregate([{$group:{_id:"$category", 
        num:{$sum:1}, 
        blues:{$sum:{$cond:[{$eq:["$color","blue"]}, 1, 0]}} 
}}] 
+0

謝謝。只是一個小小的更正:[「顏色」:「藍色」]實際上應該編碼爲[「顏色」,「藍色」]。 – anr1234

+0

你是對的!固定! –

+0

以下是否正確? ............ {$ eq:[「$ attributes.color」,「red」]} ..............在「屬性」是一個子文檔數組....並且,「color」是子文檔中的一個字段。問題是相關的$ sum是0(我認爲這是因爲每個文檔的$ cond計算爲0)。 – anr1234

相關問題