mongodb 如何在嵌套数组中查询并只投影数组中匹配的项?

mfuanj7w  于 2022-12-22  发布在  Go
关注(0)|答案(1)|浏览(115)

其结构如下所示:

{

    clientName: "client1",
    employees: [
        {
            "employeename": 1,
            "configuration": {
                "isAdmin": true,
                "isManager": false
            }
        }
        {
            "employeename": 2,
            "configuration": {
                "isAdmin": false,
                "isManager": false
            }
        }...
        
    ]
},
{
...
}

'我想查看一个特定客户端中的管理员员工,假设我有客户端名称。我如何在MongoDB中为此编写查询?我想只查看(项目)匹配的员工?我可以组合它来匹配多个条件吗?例如:既是行政人员又是经理的人。
我尝试过:
db. collection. find({客户端名称:"客户端1"、"雇员.配置. isAdmin":true},{"雇员.雇员姓名":1})
这只是返回所有员工。
我也尝试过使用$elemMatch,但没有效果。
任何帮助都很感激。

c0vxltue

c0vxltue1#

您可以使用聚合框架来完成此操作:

  • $match-根据clientName属性过滤文档
  • $filter$eq-仅筛选具有管理员权限的员工
db.collection.aggregate([
  {
    "$match": {
      "clientName": "client1"
    }
  },
  {
    "$set": {
      "employees": {
        "$filter": {
          "input": "$employees",
          "cond": {
            "$eq": [
              "$$this.configuration.isAdmin",
              true
            ]
          }
        }
      }
    }
  }
])

Working example

相关问题