如何一次获取类型数组?

时间:2016-06-09 03:34:53

标签: mongodb mongoose mongodb-query aggregation-framework

例如,我有一个这样的集合:

{"_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&#39>

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

我应该像db.colA.find({type: type}).count()那样进行循环吗?

2 个答案:

答案 0 :(得分:1)

为此,您需要使用聚合框架。你需要{"键入"并使用$group累加器运算符返回" count"对于每个"类型"。

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

当然,您可以随时获得" A"," B"," C"使用$sum方法:

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

答案 1 :(得分: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
}