MongoDB文档中所有数组大小的总和

MongoDB文档中所有数组大小的总和,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,在MongoDB上,我有这样一个集合:- { org: "org", departments: [ { name: "abc", employees: [ { name: "number1" }, { name: "number2" }, { name: "number3" }, ] }, { name: "mno", employees:

在MongoDB上,我有这样一个集合:-

{
  org: "org",
  departments: [
    {
       name: "abc",
       employees: [
         { name: "number1" },
         { name: "number2" },
         { name: "number3" },
       ]
    },
    {
       name: "mno",
       employees: [
         { name: "number4" },
         { name: "number5" }
       ]
    },
    {
       name: "xyz",
       employees: [
         { name: "number6" },
         { name: "number7" }
       ]
    }
  ]
},{
  org: "xyz"....
}
如何使用聚合查找“组织”中的员工总数? 预期结果 { 组织:“组织”, 员工总数:7人 }, { 组织:“xyz”, 员工总数:x },..

您可以使用来获取内部数组的长度,并对这些长度求和:

db.collection.aggregate([
    {
        $project: {
        total_employees: {
            $reduce: {
                input: "$departments",
                initialValue: 0,
                in: { $add: [ "$$value", { $size: "$$this.employees" } ]  }
            }
        }
        }
    }
])

通过使用聚合在
部门
数组上循环,可以找到数组的(长度),然后可以将所有数组值组合在一起

db.collection.aggregate([
  { "$project": { 
    "total_employees": {
      "$sum": {
        "$map": { 
          "input": "$departments",
          "in": { "$size": "$$this.employees" }
        }
      }
    }
  }}
])

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "total_employees": 7
  }
]