假设我有一个这样的模式:
var Person = new Schema({
name: String
});
var Assignment = new Schema({
name: String,
person: ObjectID
});
如果我删除了一个人,仍然可能会留下一些孤立的任务,这些任务引用了一个不存在的人,这会在数据库中造成额外的混乱.
有没有一种简单的方法可以确保当一个人被删除时,对该人的所有相应引用也会被删除?
假设我有一个这样的模式:
var Person = new Schema({
name: String
});
var Assignment = new Schema({
name: String,
person: ObjectID
});
如果我删除了一个人,仍然可能会留下一些孤立的任务,这些任务引用了一个不存在的人,这会在数据库中造成额外的混乱.
有没有一种简单的方法可以确保当一个人被删除时,对该人的所有相应引用也会被删除?
您可以在Person
模式中添加自己的'remove'
Mongoose middleware,以便从引用它的所有其他文档中删除此人.在中间件函数中,this
是要删除的Person
文档.
Person.pre('remove', function(next) {
// Remove all the assignment docs that reference the removed person.
this.model('Assignment').remove({ person: this._id }, next);
});