2016-06-09 37 views
1

例如,我有這樣一個集合:如何獲得一次數組的數量?

{"_id": 1, "type": 'A', "data": "asdff"}, 
{"_id": 2, "type": 'B', "data": "fsdfs"}, 
{"_id": 3, "type": 'A', "data": "aesdf"}, 
{"_id": 4, "type": 'C', "data": "sdsdd"}, 

我能得到A型的計數:

db.colA.find({type: 'A'}).count() 

我怎樣才能得到類型的數組,例如,A,B,C的計數

db.colA.find({type: {$in: ['A', 'B', 'C']}}).countByType() ?? 

我應該做一個像db.colA.find({type: type}).count()這樣的循環嗎?

回答

1

爲了做到這一點,您需要使用聚合框架。您只需按「類型」輸入$group您的文檔,然後使用$sum累加器運算符爲每個「類型」返回「計數」。

db.colA.aggregate(
    [ 
     { "$match": { "type": { "$in": [ "A", "B", "C" ] } }, 
     { "$group": { 
      "_id": "$type", 
      "count": { "$sum": 1 } 
     }} 
    ] 
) 

當然,你總是可以得到的總數爲 「A」, 「B」, 「C」 使用count()方法:

db.colA.count({ "type": { "$in": [ "A", "B", "C" ] } }) 
1

這個工作對我來說:

db.getCollection('Mytest').aggregate([{ 
      $group: 
      {_id: {"type":"$type"},"count": { $sum: 1 }}}]) 

輸出:

{ 
    "_id" : { 
     "type" : "C" 
    }, 
    "count" : 1 
} 


{ 
    "_id" : { 
     "type" : "B" 
    }, 
    "count" : 1 
} 


{ 
    "_id" : { 
     "type" : "A" 
    }, 
    "count" : 2 
}