如何在MongoDb中使用$in$or运算符?

如何在MongoDb中使用$in$or运算符?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下文件的数据 [ { "_id":"5e93193f755fc5e74beb5e8f", "orgs":[ { "type":"NonEmployee", "roles":[] }, { "type":"Founder", "roles":[ { "_id":"5e44fd4546b3954e6930e83d",

我有以下文件的数据

[
  {
    "_id":"5e93193f755fc5e74beb5e8f",
    "orgs":[
      {
        "type":"NonEmployee",
        "roles":[]
      },
      {
        "type":"Founder",
        "roles":[
          {
            "_id":"5e44fd4546b3954e6930e83d",
            "name":"ADMIN"
          },
          {
            "_id":"5e44fd4546b3954e6930e83e",
            "name":"EMPLOYEE"
          }
        ]
      }
    ]
  }
]
我感兴趣的问题是, 根据以下“或”条件筛选文档

  • 如果其类型为“非雇员”
  • 如果它在给定数组中有角色,例如rolesArray=['EMPLOYEE']
聚合中的子查询如下所示

{
  $match: {
     $expr: {
      $or: [
        {
          $in: ["$orgs.roles.name", rolesArray]
        },
        {
          $eq: ['$orgs.type', 'NonEmployee']
        }
      ]
    }
  }
}

这将以空数组的形式给出结果,因为查询不正确。是否有任何可能的方法来实现这一点?

您可以使用匹配所有指定查询条件的elematch来查询它

您可以参考以下文档:

我感兴趣的查询是,根据“或”筛选文档 下列条件

  • 如果其类型为“非雇员”
  • 如果它在给定数组中有角色,例如rolesArray=['EMPLOYEE']
使用
$match
阶段和操作符
$or
$in
的聚合查询:

ROLES_ARRAY =  [ "EMPLOYEE", "OTHER" ]

db.collction.aggregate( [
  { 
      $match: { 
          $or: [ { "orgs.roles.name": { $in: ROLES_ARRAY  } }, { "orgs.type": "NonEmployee" } ] 
      } 
  }
] )
使用
find
方法执行相同的查询:

db.collection.find( { $or: [ { "orgs.roles.name": { $in: ROLES_ARRAY  } }, { "orgs.type": "NonEmployee" } ] } )