删除猫鼬中的一对多引用

时间:2019-08-16 21:27:46

标签: mongodb express mongoose

我正在使用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移除中间件。

0 个答案:

没有答案