场景1:根据用户分组,查询相同的用户下,同时包含多个角色
db.getCollection('Sys_RT_Rel_Role_User').aggregate([ {$group: { _id: "$USER_CD", // 根据什么字段分组 "ROLE_CD": {"$push": "$ROLE_CD"}, //根据USER_CD分组,然后把ROLE_CD放进列表里 count: {$sum:1} } }, {$match: {"ROLE_CD": {$all: ["GATE_ROLE_DF_FILL","GATE_ROLE_DF_CITY_MANAGER"]}} //根据上面放进列表的ROLE_CD,查询同时包含多个角色 }, ])
当match在group之前类似于SQL的where操作,在group之后类似于SQL的having操作
场景2:根据两个字段分组查询重复的
db.getCollection('Sys_RT_Rel_Role_User').aggregate([ { $group: { _id: { role_cd: '$ROLE_CD', user_cd: '$USER_CD' }, count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } } ])