是否可以在使用$group时列出不存在的组?



如果我想从我的节点服务器(使用mongoosoe)对mongodb集合执行$group和$sum,是否有可能为不存在的组返回0 ?该集合包含以下字段:ssn、姓名、性别、城市。

        model.aggregate([
        {
            $group : { _id : { city:"$city", gender:"$gender"}, count{ $sum:1 }}
        }], function (err,result) {
                if(err) {
                    //err
                }
                else{
                    //response
                }
        });

如果城市中男女都有,查询将返回:

{
"_id" : {
    "city" : "NY",
    "gender" : "male"
},
"count" : 11
},
{
"_id" : {
    "city" : "NY",
    "gender" : "female"
},
"count" : 31
}

但是如果一个城市中不存在某一性别的人,则不返回值。例如,洛杉矶没有男性:

{
"_id" : {
    "city" : "LA",
    "gender" : "female"
},
"count" : 53
}

是否有可能在没有城市和人口数量集合的情况下,使查询返回给定场景的以下结果?

{
"_id" : {
    "city" : "LA",
    "gender" : "male"
},
"count" : 0
},    
{
"_id" : {
    "city" : "LA",
    "gender" : "female"
},
"count" : 53
}

谢谢,

如果可能的值是有限的,并且在您的示例中已知,您可以使用$cond将男性和女性的计数组合到每个城市的一个文档中,如下所示:

[
    {
        $group : {
            _id: {
                city:"$city"
            }, 
            males:{
                $sum: {
                    $cond: {if: {$eq:["$gender", "male"]}, then: 1, else: 0}
                } 
            }, 
            females:{
                $sum: {
                    $cond: {if: {$eq:["$gender", "female"]}, then: 1, else: 0}
                } 
            }
        }
    }
]

最新更新