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