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方法更灵活、更可定制