2015-11-21 88 views
2

我有大約50000個文檔在集合中。集合架構看起來像這樣:如何在mongoDB中獲得多個匹配過濾器計數

{ param1: Boolean, param2: Boolean, param3: Boolean, param4: Boolean } //etc 

我該如何查詢數據庫,以獲得每個匹配的參數計數。 目前,我打電話是一個循環的每個PARAM:

db.getCollection('patients').count({ param1: true }) 
db.getCollection('patients').count({ param2: true }) 
db.getCollection('patients').count({ param3: true }) ... 

我覺得,這不是正確的方式,請給我一些建議,如何在一個查詢中獲取此信息。

回答

0

很有可能一次通過aggregation framework。在流水線內,利用$group階段中的$cond運算符來評估基於參數字段布爾值的計數,如下所示:

db.patients.aggregate([  
    { 
     "$group": { 
      "_id": null,    
      "param1_count": { 
       "$sum": { 
        "$cond": [ "$param1", 1, 0 ] /* similar to "$cond": [ { "$eq": [ "$param1", true ] }, 1, 0 ] */ 
       } 
      }, 
      "param2_count": { 
       "$sum": { 
        "$cond": [ "$param2", 1, 0 ] 
       } 
      }, 
      "param3_count": { 
       "$sum": { 
        "$cond": [ "$param3", 1, 0 ] 
       } 
      }, 
      "param4_count": { 
       "$sum": { 
        "$cond": [ "$param4", 1, 0 ] 
       } 
      } 
     } 
    }, 
    { 
     "$project": { 
      "_id": 0,    
      "param_counts": { 
       "param1": "$param1_count", 
       "param2": "$param2_count", 
       "param3": "$param3_count", 
       "param4": "$param4_count" 
      } 
     } 
    } 
])