MongoDB通过比较操作从SUB文档中获取单个计数

MongoDB通过比较操作从SUB文档中获取单个计数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我用的是mongoDB我用的是query db.getCollection('managements').find({'managers.role':"HR"},{'managers.$':1}) 我得到的结果如下 /* 1 */ { "_id" : ObjectId("1"), "managers" : [ { "id" : "100", "role" : "HR" }, {

我用的是mongoDB我用的是query

db.getCollection('managements').find({'managers.role':"HR"},{'managers.$':1})
我得到的结果如下

/* 1 */
{
    "_id" : ObjectId("1"),
    "managers" : [ 
        {
            "id" : "100",
            "role" : "HR"
        },
        {
            "id" : "101",
            "role" : "ADMIN"
        },
        {
            "id" : "102",
            "role" : "ADMIN"
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("2"),
    "managers" : [ 
        {
            "id" : "104",
            "role" : "ADMIN"
        },
        {
            "id" : "105",
            "role" : "HR"
        }
        ,
        {
            "id" : "106",
            "role" : "HR"
        }
        ,
        {
            "id" : "107",
            "role" : "HR"
        }
    ]
}
现在我想获得个人记录,其中角色是HR,计数不止一个,如

{ id:2
count : 3}

您可以使用下面的聚合

db.collection.aggregate([
  { "$match": {
    "$expr": {
      "$gte": [
        { "$size": {
          "$filter": {
            "input": "$managers",
            "cond": { "$eq": ["$$this.role", "HR"] }
          }
        }},
        2
      ]
    }
  }},
  { "$addFields": {
    "count": {
      "$size": {
        "$filter": {
          "input": "$managers",
          "cond": { "$eq": ["$$this.role", "HR"] }
        }
      }
    }
  }}
])