When i delete course then also delete the reference records of course.
For example i have mca course and it's reference subject is c, java, python when i delete mca also delete the all the reference subject.
How can i do this. Please help
Here is Course.js
const mongoose = require('mongoose');
const Subject = require('./Subject');
const courseSchema = new mongoose.Schema({
course_name: String,
course_semester: Number
})
courseSchema.virtual('subjects', {
ref: 'Subject',
localField: '_id',
foreignField: 'course_id'
})
// Delete subject when course is removed
courseSchema.pre('remove', async function (next) {
const course = this
await Subject.remove({ course_id: course._id })
next()
})
const Course = mongoose.model('Course', courseSchema)
module.exports = Course
Here is Subject.js
const mongoose = require('mongoose');
const subjectSchema = new mongoose.Schema({
subject_code: String,
subject_name: String,
subject_theory_marks: Number,
subject_practicle_marks: Number,
course_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Course'
}
})
const Subject = mongoose.model('Subject', subjectSchema)
module.exports = Subject
courseRoute.js
router.get('/admin/delete-course/:id', adminAuthMiddleware,
async (req, res) => {
try {
await Course.findByIdAndRemove(req.params.id, (err, doc) => {
if (!err) {
res.redirect('/admin/view-course');
} else {
res.send('Error in Course delete :' + err);
}
})
} catch (err) {
res.send(err);
}
});
I found solution of this problem. you need to call remove() in your route
courseRoute.js
router.get('/admin/delete-course/:id', adminAuthMiddleware,
async (req, res) => {
try {
await Course.findByIdAndRemove(req.params.id, (err, doc) => {
if (!err) {
doc.remove() //here is the solution
res.redirect('/admin/view-course');
} else {
res.send('Error in Course delete :' + err);
}
})
} catch (err) {
res.send(err);
}
});