使用$ 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} } } } } ]