计算文档中数组内的元素总数 - MongoDB

时间:2015-12-14 13:23:30

标签: mongodb nosql

我有一份与员工角色或名称相关的文件。这是文档结构。

{
    "_id" : ObjectId("5660c2a5b6fcba2d47baa2d9"),
    "role_id" : 4,
    "role_title" : "Carpenter",
    "employees" : [ 
        {
            "$ref" : "employees",
            "$id" : 4,
            "$db" : "db_cw2"
        }, 
        {
            "$ref" : "employees",
            "$id" : 5,
            "$db" : "db_cw2"
        }
    ]
},

{
    "_id" : ObjectId("5660c2a5b6fcba2d47baa2d6"),
    "role_id" : 1,
    "role_title" : "Chief Executive",
    "employees" : [ 
        {
            "$ref" : "employees",
            "$id" : 1,
            "$db" : "db_cw2"
        }
    ]
}

我想写一个查询来显示或统计以“Carpenter”工作的员工总数或简单的单词计算“员工”字段中元素的数量,其中'role_title':'Carpenter'。

我已经编写了此查询,但它显示了该集合的所有文档中的员工总数。

db.employee_role.aggregate(
   {
        $project: { 
            count: { $size:"$employees" }
        }
   }
)

2 个答案:

答案 0 :(得分:3)

您必须改为使用$group

db.employee_role.aggregate(
   {
        $group: {
            _id: "$role_title",
            total: { $sum: { $size:"$employees" } }
        }
   }
)

role_title分组,然后添加员工人数。

答案 1 :(得分:2)

你可以用这个:

db.employee_role.aggregate(
  [
    {
      $match: { role_title: "Carpenter" }
    },
    {
      $group: {
        _id: "$role_title",
        total: { $sum: { $size: "$employees"} }
      }
    }
  ]
)