基于Mongoose按角色查询用户时同时返回管理员角色用户的技术实现问询
解决方案:查询指定角色时同时返回管理员用户
要实现“查询任意角色时自动包含管理员角色用户”的需求,只需要调整角色查询的条件,使用MongoDB的$in操作符来匹配目标角色+管理员角色的集合即可。
修改你的listAllStaffs方法
核心变化是把原来精确匹配单个角色的逻辑,换成匹配包含目标角色和admin角色的数组:
public async listAllStaffs(query: ListStaffsRequestQueryDTO) { let conditions = {}; if (query.role) { // 用$in同时匹配目标角色和admin角色 conditions = { role: { $in: [query.role, 'admin'] }, 'hub.id': query.merchant }; } else { conditions = {'hub.id': query.merchant }; } const data = { page: query.page, limit: query.limit, conditions: conditions}; const all = await this.list(data); const pagination = { page: all.page, limit: all.limit, rowCount: all.rowCount, pageCount: all.pageCount }; const staffs = all.staffs; return { staffs, pagination }; }
关键逻辑说明
- 当传入
query.role(比如operation)时,查询条件会变成role: { $in: ['operation', 'admin'] },这样MongoDB会返回所有角色是operation或者admin的用户。 - 如果没有传入
query.role,则保持原逻辑,只返回当前商户下的所有用户。 - 注意:如果你的管理员角色标识不是
'admin',请替换成你系统中实际使用的角色值(比如'super_admin')。
额外说明
如果担心当查询的角色本身就是admin时出现重复匹配(比如$in: ['admin', 'admin']),完全不用担心——MongoDB的$in操作符会自动处理重复值,不会影响查询结果的正确性和性能。
内容的提问来源于stack exchange,提问作者King
相关产品推荐
相关产品推荐

