如何根据mongo聚合中的值来计算不同的密钥

时间:2015-10-30 13:58:19

标签: mongodb database

我在mongo中有一个集合,需要创建一个带有统计信息的查询,例如按名称注册的数量和按私有密钥注册的数量等等。

{
  _id : 123,
  name: capnis
  privated: true
},
{
  _id : 124,
  name: capnis
  privated: false
}, ....

当尝试在mongo中执行查询时,不知道如何获得此结果

{name: capnis,
 total: 2,
 totalprivatedtrue:1,
 totalprivatedfalse:1 }

这里我得到了总数,但又怎么能得到另一个呢?

.aggregate([
  {$match: {name: "$name"} },
  {$group: {_id:"$name", total: {$sum:1} } }
])

1 个答案:

答案 0 :(得分:1)

$cond管道步骤中应用$group运算符,根据privated字段评估计数,如下所示:

db.collection.aggregate([    
    { 
        "$group": { 
            "_id": "$name",             
            "total": {
                "$sum":  1
            },
            "totalprivatedtrue": {
                "$sum": {
                    "$cond": [ "$privated", 1, 0 ]
                }
            },
            "totalprivatedfalse": {
                "$sum": {
                    "$cond": [ { "$eq": [ "$privated", false ] }, 1, 0 ]
                }
            }
        }  
    }
])