类似子查询的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" } }
])

posted @ 2020-01-16 16:53  Jenny-1  阅读(479)  评论(0编辑  收藏  举报