【问题标题】:When deleting parent record then also delete reference record in mongoose node js || How can i delete reference record when deleting parent record删除父记录时,还要删除猫鼬节点js中的参考记录||删除父记录时如何删除参考记录
【发布时间】:2021-05-23 21:28:32
【问题描述】:

当我删除课程时,当然也会删除参考记录。

例如我有 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);
    }
});

【问题讨论】:

标签: node.js database mongodb mongoose mongoose-schema


【解决方案1】:

我找到了这个问题的解决方案。 你需要在你的路由中调用 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);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多