在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。