如果我想从我的节点服务器(使用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}
}
}
}
}
]