mongodb – 级联风格删除在Mongoose

有没有办法删除Mongoose中的所有子进程,类似于使用MySQL的外键?

例如,在MySQL中,我将分配一个外键并将其设置为级联以进行删除。因此,如果我要删除客户端,所有应用程序和关联的用户也将被删除。

从顶层:

>删除客户端
>删除抽奖
>删除提交

抽奖和提交都有一个client_id的字段。提交内容有一个用于sweepstakes_id和client_id的字段。

现在,我使用以下代码,我觉得必须有一个更好的方法。

Client.findById(req.params.client_id, function(err, client) {

    if (err)
        return next(new restify.InternalError(err));
    else if (!client)
        return next(new restify.ResourceNotFoundError('The resource you requested could not be found.'));

    // find and remove all associated sweepstakes
    Sweepstakes.find({client_id: client._id}).remove();

    // find and remove all submissions
    Submission.find({client_id: client._id}).remove();

    client.remove();

    res.send({id: req.params.client_id});

});
这是Mongoose’remove’middleware的主要用例之一。

clientSchema.pre('remove', function(next) {
    // 'this' is the client being removed. Provide callbacks here if you want
    // to be notified of the calls' result.
    Sweepstakes.remove({client_id: this._id}).exec();
    Submission.remove({client_id: this._id}).exec();
    next();
});

这样,当您调用client.remove()时,会自动调用此中间件来清除依赖关系。

http://stackoverflow.com/questions/14348516/cascade-style-delete-in-mongoose

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:mongodb – 级联风格删除在Mongoose