Javascript Mongoose等价于JOIN。。。哪里

Javascript Mongoose等价于JOIN。。。哪里,javascript,mongodb,express,mongoose,non-relational-database,Javascript,Mongodb,Express,Mongoose,Non Relational Database,我有两个模型 Opinion { _id: string; creator: string; teacher: ObjectId; text: string; date: Date; } Teacher { _id: string; name: string; isVerified: boolean; } 我需要在{teacher.isverify:true} 我试过了 const newOpinions = await Opinion.find(

我有两个模型

Opinion {
  _id: string;
  creator: string;
  teacher: ObjectId;
  text: string;
  date: Date;
}

Teacher {
  _id: string;
  name: string;
  isVerified: boolean;
}
我需要在
{teacher.isverify:true}

我试过了

    const newOpinions = await Opinion.find(
      null,
      "creator teacher text",
      {
        sort: {
          date: -1,
        },
      }).populate(
        {
          path: 'teacher',
          model: 'Teacher',
          select: 'name',
          match: {
            isVerified: true,
          },
        }
      ).limit(3);
但是(经过简短的分析后)它是按设计工作的-我得到了3个最新的意见,无论教师是否被验证(在教师领域,如果没有验证,我得到
null


有人能给我指出正确的方向吗?我想可能是使用
Model.aggregate()
这是一种方法。使用此选项,您将首先筛选教师。也请咨询

Teacher.aggregate([{
$match:{isVerified:true}
}, {
$lookup:{
from:'Operations'//假设您有一个名为'Operations'的集合,用于模型'Operation',
localField:“\u id”,//加入教师。\u id。。。
外域:'教师',/…带opionion.teacher
如:“意见”
}//从这里,你可以得到有着深刻见解的经过验证的教师,
//进一步的阶段是可选的。我们将修改输出的形状,使其仅为意见
}, { 
$unwind:'$OPTIONS'//将意见数组分散到单独的文档中
}, {
$replaceRoot:'$opinions'//仅用opinion替换根文档
}])

mongodb中join的等价物是$lookup。mongoose的方法是使用populate,但必须在模型中提供ref键

用于查找用途

猫鼬参考

Opinion {
  _id: string;
  creator: string;
  teacher: {
      type: Schema.Types.ObjectId, ref: 'Teacher'
  },
  text: string;
  date: Date;
}

Teacher {
  _id: string;
  name: string;
  isVerified: boolean;
}
$lookup方法更灵活、更可定制