MongoDB通过比较操作从sudocument中获取个人计数 [英] MongoDB get individual count from sudocuments with comparison operations

查看:48
本文介绍了MongoDB通过比较操作从sudocument中获取个人计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用mongoDB我正在使用查询

I am using mongoDB I use 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且人数不止一个,例如

Now I want to get individual records where role is HR and count is more than one, like

{ id:2
count : 3}

推荐答案

您可以在下面的聚合中使用

You can use below aggregation

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

这篇关于MongoDB通过比较操作从sudocument中获取个人计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆