我有一个用户模式,因为它有一个角色引用,这是一个ID数组,我想用角色ID过滤用户.

const users = await User.find(
  { roles: { $in: [params.role] } },
  "-password"
)
  .populate({
    path: "roles",
  });

这是我的用户架构.

const userSchema = new mongoose.Schema(
  {
    email: {
      type: String,
      required: true,
    },
    password: { type: String, required: true },
    contact: { type: mongoose.Schema.Types.ObjectId, ref: "Contact" },
    roles: [{ type: mongoose.Schema.Types.ObjectId, ref: "Role" }],
  },
  {
    timestamps: true,
  }
);

在这里,参数角色是单个角色id,而我在这里得到的用户结果是空的.

推荐答案

如果params.role是一个单一值,那么您不需要$in.由于User.roles是一个ObjectId类型的数组,Mongoose应该为您将搜索字符串转换为ObjectId,这样您就可以按常规方式进行搜索,但请确保params.role中有一个值,而您的意思实际上不是req.params.role:

console.log('params.role=', params.role);
const users = await User.find({ roles: params.role}, "-password").populate({
    path: "roles",
});

Javascript相关问答推荐

为什么新的Promises会在不需要的情况下被用来等待?

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

模块与独立组件

如何在RTK上设置轮询,每24小时

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

在我的html表单中的用户输入没有被传送到我的google表单中

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

单个HTML中的多个HTML文件

用于在路径之间移动图像的查询

在数组中查找重叠对象并仅返回那些重叠对象

当我在Reaction中创建一个输入列表时,我的输入行为异常

如何在Bootstrap中减少网格系统中单个div的宽度

按下单键和多值

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

如何使用基于promise (非事件emits 器)的方法来传输数据?

如何访问此数组中的值?

在不扭曲纹理的情况下在顶点着色器中旋转UV

ngOnChanges仅在第二次调用时才触发