我正在使用MongoDB和Mongoose软件包建立教师与课程的关系。
我通过以下方式建立了教师模型:
const TeacherSchema = new Schema ({
email: ...,
name: ...,
courses: [{type: ObjectId, ref: "Course"}]
})
我也是这样的课程模型:
const CourseSchema = new Schema ({
name: ...,
code: ...,
teacher: [{type: ObjectId, ref: "Teacher"}]
})
我想做的是,当老师删除课程时,该老师内的课程参考也将被删除。换句话说,类似于删除级联上的SQL行为。
通过阅读文档和其他一些与Stackoverflow相关的问题,我所使用的是猫鼬中间件,例如pre和post remove。
我尝试以下操作,但课程被删除,但教师文档中的引用未被删除!。
在教师控制器内
const id = req.params.courseId;
Course.findById(id, (error, course) => {
if (error) {
console.log(err);
res.status(500).json({
error: err
});
}
if (course) {
course.remove();
res.status(200).json({
message: "Course deleted",
});
}
})
以及在课程模型中:
CourseSchema.pre('remove', function (next) {
Teacher.findById(this.teacher, (error, teacher) => {
if (!error) {
teacher.courses.remove(this._id);
next();
}
});
next();
});
在线尝试了许多解决方案,请阅读文档,但似乎永远无法达到pre / post移除中间件。