最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

删除猫鼬参考文献

运维笔记admin13浏览0评论

删除猫鼬参考文献

删除猫鼬参考文献

我有2个模式。一个用户架构和一个项目架构。用户架构包含对项目架构的引用。用户架构:

const UserSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    },
    projects: [
        {
            type: Schema.Types.ObjectId,
            ref: 'Project'
        }
    ]
});

项目架构:

const projectSchema = new Schema({
    experience: [
        {
            company: String,
            positionExperience: String,
            descriptionExperience: String,
            websiteExperience: String,
            timeperiodExperience: Array,
        }
    ],
    education: [
        {
            school: String,
            degree: String,
            descriptionEducation: String,
            websiteEducation: String,
            timeperiodEducation: Array
        },
    ],
}, {
        collection: 'project'
    });

当当前登录的用户保存项目时,它会通过以下方式在用户架构中的项目数组内推送:user.projects.push(project);

我有一个删除路径,可让用户删除项目:

router.delete('/delete/:id', passport.authenticate('jwt', { session: false }), (req, res, next) => {
    Project.findByIdAndRemove({ _id: req.params.id }, (err) => {
        if (err) res.json(err)
        else res.json('Succesfully removed')
    });
})

但是,不会从数据库中当前登录的用户集合中删除项目ID。数据库日志:

"_id" : ObjectId("5d9474c2dccfb181dd8e9fde"),
    "projects" : [
        ObjectId("5d9474cddccfb181dd8e9fdf"),
        ObjectId("5d94753e9b610a81f83937e9"),
        ObjectId("5d947602f72f0f820f2974f0"),
        ObjectId("5d947ae435d2e982535d9a53"),
    ],
    "username" : "b",
    "password" : "$2a$10$4T1TjmFYD/01wEdMbiSRMeKNVKegnkVBOGGHasP.qJjVbQzmgEZDO",
    "email" : "b",

所有项目均已删除,但其ID仍在用户记录中。我还需要某种垃圾回收来删除那些垃圾。我看着Cascade Delete。级联删除意味着如果删除父表中的记录,则子表中的相应记录将被自动删除。在我的情况下,用户是父表,并且我不尝试删除用户,而是在尝试删除与该用户关联的项目。我已经尝试过类似的事情:

User.findOne({ username: req.user.username }, (err, user) => {
    Project.remove({
        "_id": {
            $in: user.projects
        }
    }, function(err) {
        if(err) return next(err);
        user.deleteOne()
    })
})

但是这会删除整个用户...我如何从项目集合中删除一个项目,以及与登录用户对应的项目?预先感谢。

回答如下:

您需要编写自己的删除功能。看看this question已解决此问题的地方。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论