mongodb上的多次总数/计数(总和性别和总结果)

Jor*_*sen 1 mongodb aggregation-framework

我有这个文件:

{gender:"male", ...},
{gender:"male", ...},
{gender:"female", ...},
{gender:"female", ...},
{gender:"female", ...},
Run Code Online (Sandbox Code Playgroud)

所以,我需要像

{
total:5,
male:2,
female:3
}
Run Code Online (Sandbox Code Playgroud)

我的实际查询(没有工作):

db.collection.aggregate([
{
    $match:{...}
},
{
    $group:{
        _id:"$_id",
        gender:{
            $push:"$gender"
        },
        total:{
            $sum:1
        }
    }
},
{
    $unwind:"$gender"
},
{
    $group:{
        _id:"$gender",
        name:{
            $addToSet:"$all"
        },
        "count":{
            $sum:1
        }
    }
}
])
Run Code Online (Sandbox Code Playgroud)

我如何能够追溯性别和总数?谢谢

Syl*_*oux 5

这样的事情会起到作用:

db.collection.aggregate([
  {$project: {
    male: {$cond: [{$eq: ["$gender", "male"]}, 1, 0]},
    female: {$cond: [{$eq: ["$gender", "female"]}, 1, 0]},
  }},
  {$group: { _id: null, male: {$sum: "$male"},
                        female: {$sum: "$female"},
                        total: {$sum: 1},
  }},
])
Run Code Online (Sandbox Code Playgroud)

根据你的例子制作:

{ "_id" : null, "male" : 2, "female" : 3, "total" : 5 }
Run Code Online (Sandbox Code Playgroud)

关键的想法是使用条件表达式将性别映射到0或1.之后,您需要的只是每个字段的简单总和.