如果我想从我的节点服务器(使用mongoosoe)对mongodb集合执行$ group和$ sum,是否可以为非现有组返回0? 该集合包含以下字段:ssn,name,gender,city。
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
}
感谢,
答案 0 :(得分:1)
如果可能的值是有限的且在您的示例中已知,您可以使用 $ 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}
}
}
}
}
]