类似子查询的mongo查询语句
db.getCollection("表").aggregate([
//使用$facet整理出需要的数据
{$facet:{
//当前能用
CanUse:[{$match:{$or:[
//最大级
{'Code':null,'UseType':1,'UseSceneTypeCode':{$in:['使用场景']}},
//次级
{'Code':{$in:['编码']},'UseType':1,'UseSceneTypeCode':{$in:['使用场景']}},
]
}
}],
//直接不能用的
NotUse:[{$match:{$or:[
//最大级
{'Code':null,'UseType':2,'UseSceneTypeCode':{$in:['使用场景']}},
//次级
{'Code':{$in:['编码']},'UseType':2,'UseSceneTypeCode':{$in:['使用场景']}}
]
}
}],
//所有能用的
AllUse:[
{$match:{'UseType':1}}
]
}},
//整理出子查询的结果集。数组['','','']
{$addFields:{CanUseModuleIds:'$CanUse.ModuleId'}},
//找到AllUse中不在CanUse里边的,放到OtherNotUse
{$addFields:{OtherNotUse:{$filter:{input:'$AllUse',as:'ct',cond:{$not:[{$in:['$$ct.ModuleId','$CanUseModuleIds']}]}}}}},
//NotUse和OtherNotUse并集,就是结果
{ $project: { res: { $concatArrays: [ "$NotUse", "$OtherNotUse" ] } } },
{ $unwind: "$res" },
{ $replaceRoot: { newRoot: "$res" } }
])