首页 > 解决方案 > MongoDB | 如何计算对象数组中属性的特定值和按属性分组

问题描述

收集如下文件:

{ 
    "_id" : ObjectId("5dc027718da295b969e529ae"), 
    "emp_no" : 10001, 
    "gender" : "M", 
    "titles" : [
        {
            "title" : "Senior Engineer", 
            "dept_name" : "Development", 
            "from_date" : "1986-06-26", 
            "to_date" : "9999-01-01"
        },
        {
            "title" : "Staff", 
            "dept_name" : "Human Resources", 
            "from_date" : "1986-06-26", 
            "to_date" : "9999-01-01"
        }
    ]
}

我如何计算某个部门有多少 M 在工作,所以我会得到像Development:874505这样的结果?
我有另一个集合,其中包含以下文档:

//one document
{ 
    "_id" : ObjectId("5dc026438da295b969e01893"), 
    "dept_no" : "d005", 
    "dept_name" : "Development", 
    "emp_no" : 10001, 
    "from_date" : "1986-06-26", 
    "to_date" : "9999-01-01"
}

//another document
{ 
    "_id" : ObjectId("5dc026438da295b969e01894"), 
    "dept_no" : "d003", 
    "dept_name" : "Human Resources", 
    "emp_no" : 10001, 
    "from_date" : "1986-06-26", 
    "to_date" : "9999-01-01"
}

也许使用这个可以使过程更容易?

标签: mongodbmongodb-queryaggregation-framework

解决方案


这可以通过使用$count运算符来完成。我鼓励您阅读此处的文档。如果您以前从未使用过方法聚合文档

使用第一个集合

db.collection.aggregate([
  {
    $match: {
      "titles.title": "Senior Engineer",
      gender: "M"
    }
  },
  {
    $count: "Human Resources count"
  }
])

输出将是:

 {
    "Human Resources count": x
 }

推荐阅读