MongoDb如何计算字段

时间:2016-07-28 16:39:24

标签: mongodb

我有一些这样的数据:

{
    user_id:1,
    group_id:123,
    discription:null
},
{
    user_id:1,
    group_id:321,
    discription:null
},
{
    user_id:1,
    group_id:123,
    discription:"text"
},
{
    user_id:1,
    group_id:321,
    discription:"another text"
},
{
    user_id:1,
    group_id:321,
    discription:"another another text"
},
etc..

我希望获取所有组(group by group_id),每个组中的文档计数,以及该组中包含" discription"具有空值而不是空值。 所以我需要结果:

[
    [group_id:123, count:2, isNull:1, isNotNull:1],
    [group_id:321, count:3, isNull:1, isNotNull:2]
]

我知道如何按" group_id"对字段进行分组。得到"计数",但我不知道如何获得有关"描述"的信息。

db.collection.aggregate([ 
    {
        $match:{
            user_id:1
        }
    },
    {
        $group:{
            _id:'$group_id',
            group_id:{$first:'$group_id'},
            count:{'$sum':1}
        }
    }
])

1 个答案:

答案 0 :(得分:0)

请检查此查询

db.testing.aggregate([{
        $match:{
            user_id:1
        }
    },     
    {$project:{_id:0,user_id:1,group_id: 1,description: { $ifNull: [ "$discription", 1 ] }}},
    {
        $group:{
            _id:'$group_id',            
            group_count:{'$sum':1},
            IsNull:{"$sum":"$description"}
        }
    },
    {$project:{_id:0,group_id:"$_id", count:"$group_count", isNull:"$IsNull", isNotNull:{ $subtract:["$group_count","$IsNull"]}}}
])