MongoDB получает индивидуальный счет из документов с операциями сравнения - PullRequest
1 голос
/ 17 января 2020

Я использую mongoDB Я использую запрос

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"
        }
    ]
}

Теперь я хочу получить отдельные записи, где роль - это ЧСС, а количество - более одного вроде

{ id:2
count : 3}

1 Ответ

1 голос
/ 17 января 2020

Вы можете использовать ниже агрегации

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"] }
        }
      }
    }
  }}
])
...