在MongoDB中删除时自动删除引用对象

假设我有这样的模式:

var Person = new Schema({ name: String }); var Assignment = new Schema({ name: String, person: ObjectID }); 

如果我删除了一个人,仍然可能存在遗留的孤立的分配,这些分配引用了一个不存在的人,这会在数据库中造成无关紧要的混乱。

有一个简单的方法可以确保当一个人被删除时,那个人的所有相应的引用也将被删除?

您可以在Person模式中添加您自己的'remove' Mongoose 中间件 ,将其从所有引用它的文档中删除。 在您的中间件function中, 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); }); 

如果通过“简单”你的意思是“内置”,那么没有。 毕竟MongoDB不是一个关系数据库。 您需要实施您自己的清洁机制。

你可以使用软删除。 不要从人员集合中删除人员,而是使用isDelete布尔标志为true。