gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:02 25 4
gpt4 key购买 nike

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

关于node.js - 使用 $group 时是否可以列出不存在的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com