删除父记录时也会删除 mongoose 节点 js 中的引用记录 ||删除父记录时如何删除参考记录
When deleting parent record then also delete reference record in mongoose node js || How can i delete reference record when deleting parent record
当我删除课程时,也会删除课程的参考记录。
例如,我有 mca 课程,它的参考主题是 c,java,python 当我删除 mca 时,也会删除所有参考主题。
我该怎么做。请帮忙
这里是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
这里是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);
}
});
我找到了这个问题的解决方案。
你需要在你的路线中调用 remove()
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);
}
});
当我删除课程时,也会删除课程的参考记录。
例如,我有 mca 课程,它的参考主题是 c,java,python 当我删除 mca 时,也会删除所有参考主题。
我该怎么做。请帮忙
这里是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
这里是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);
}
});
我找到了这个问题的解决方案。 你需要在你的路线中调用 remove()
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);
}
});