mongodb - mongodb上的多和/计数(总和性别并总计所有结果)

标签 mongodb aggregation-framework

我有这个文件:

{gender:"male", ...},
{gender:"male", ...},
{gender:"female", ...},
{gender:"female", ...},
{gender:"female", ...},

所以,我需要像这样检索

{
total:5,
male:2,
female:3
}

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

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

我如何检索性别和总数的计数器? 谢谢

最佳答案

这样的事情就可以解决问题:

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},
  }},
])

根据您的示例进行生产:

{ "_id" : null, "male" : 2, "female" : 3, "total" : 5 }

关键思想是使用 conditional expression将性别映射为 0 或 1。之后,您只需要对每个字段进行简单的求和即可。

关于mongodb - mongodb上的多和/计数(总和性别并总计所有结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484316/

相关文章:

mongodb - 如何使用 morphia 在 mongo db 中实现 Multi-Tenancy

javascript - 如何根据mongodb中引用文档中的字段进行查询

mongodb - Mongodb 聚合数组大小大于匹配

MongoDB 列表 - 获取每第 N 个项目

mongodb - 返回子文档数组与用户定义数组的交集?

mongodb - $Push 如果对象不存在

mysql - 如何在我可以从我的网站使用的 node.js 中进行身份验证?

javascript - 将多级 mongodb 文档转换为 Backbone.js 模型/集合

node.js - 如何为以下条件编写mongo聚合函数

java - MongoDb 使用聚合查询 Java 代码