Tengo una entidad de usuario que tiene un apoyo de función:
@Prop({ type: Types.ObjectId, ref: 'Roles' }) role: Role | Types.ObjectId;Tipo de rol:
export interface Role { _id: Types.ObjectId; name: string; permissions: Permission[] | Types.ObjectId[]; }Consulta para obtener usuarios:
async getUsers(body: EntitiesGetDto): Promise<User[]> { return this.usersModel .find(body.filter) .skip(body.offset) .limit(body.limit) .populate('role') .sort(body.sort ?? {}); }¿Cómo puedo filtrar a los usuarios por rol? (por rol._id o rol.nombre)
Si está utilizando 2 modelos y esquemas diferentes, intente usar búsqueda agregada , en lugar de usar poblar. Reemplace los campos de consulta para que coincidan con su caso de uso:
// initiate the aggregate func const aggr = this.userModel.aggregate(); // filter by user fields aggr.match(body.filter); // add lookup to match with the roles schema aggr.append( [{ $lookup: { from: "role", localField: "user_role", foreignField: "user_role", as: "roles" } }, // match the requested fields { $match: { '$roles.name': "..some name.." } }, // return the relevant data from the Model { $project: { _id: 1, role_name: '$roles.name', user_field3: 1, user_field4: 1, } } ]);