2013-06-19 39 views
8

文檔存儲與以下字段:如何計算布爾MongoDB中與聚合框架

_id: 
NumberofChildren: Integer 
OwnsAHome: Boolean 
Income: Integer 

我需要使用聚合框架兒童的數量,以便輸出是這樣的排序:

Number of Children: 3 
Number of People: some value, say 17 
Number of People who own a home: some value less than 17 which is a sum of the number of true Booleans 
Average income: some value 

我怎麼會做這樣的MongoDB中與聚集,特別是關於計數的次數Boolean OwnsAHome數量,是true

謝謝!

回答

15

$project階段是您的朋友,通過允許您創建具有與原始字段不同類型和值的新字段。

考慮這個投影,它使用$cond使用一個值時的東西是真實的,另一種時,它的錯誤:

{$項目:{numWhoOwnHome:{$ COND: 「$ OwnsAHome」,1,0] }}}

如果您現在執行$group{$sum : "$numWhoOwnHome"}您的結果將是OwnsAHome設置爲true的人數。

+3

不要忘記添加到$項目你想每場以包含「fieldName:1」,否則$ project中唯一出現的將是_id字段和這個新的計算字段。 –

+4

'{'$ group':{.... {count:{$ sum:{$ cond:[「$ close」,1,0]}}}} $ cond自$ 3.2版本開始工作 – eri

0

我遵循@eri建議使用$cond

鑑於數據:

campaign | flags.click | flags.removed 
c1  | true  | false 
c1  | true  | true 
c2  | false  | false 

有:

Contact.aggregate(
    [ 
     { 
      $group: { 
       _id: "$campaign", 
       countClick: { 
        $sum: { $cond: ["$flags.click", 1, 0] } 
       }, 
       countRemoved: { 
        $sum: { $cond: ["$flags.removed", 1, 0] } 
       }, 
      } 
     } 
    ] 
).exec(); 

我會得到輸出:

campaign | countClick | countRemoved 
c1  | 2   | 1 
c2  | 0   | 0