如何正确地删除MongoDB中的孤立参考?

所以,我正在Node中构build一个类似博客的小型项目,并且遇到了孤立数据库引用的问题。 我有两个模型在单独的文件,相互引用。

这是我的模特:

// ./models/user Var UserSchema = mongoose.Schema({ name: String, posts: [{type: mongoose.SchemaTypes.ObjectId, ref:'Post'}] }); // ./models/post var PostSchema = mongoose.Schema({ title:String, post_body: String, posted_by: mongoose.SchemaTypes.ObjectId }); 

我的问题是,当你删除说,一个职位,你将如何删除用户的数组中的引用? 我的想法是我可以创build一个中间件在删除path之前运行,并删除用户的数组中的引用,然后再实际删除该post。 这会被认为是最好的方式吗? 我在Stack中发现了一个post,在这个模式中使用了'pre'函数:

  // ./models/post PostSchema.pre('remove', function(next){ this.model('User').remove({posts: this._id}, next); }); 

这里是实际的post: 在MongoDB中删除时自动删除引用对象 。 虽然我无法得到这个工作。 但是我做了一个自定义的中间件来删除引用,但是觉得这可能不是最佳实践。 任何提示/build议将不胜感激。 谢谢!

你不想要.remove()在这里,但你想.update()$pull代替:

 PostSchema.pre('update',function(next) { this.model('User').update( { }, { "$pull": { "posts": this._id } }, { "multi": true }, next ); }) 

这是从数组中删除某些东西的正确操作。 “多”确保所有引用它的User对象的“post”将被删除,认为它可能真的只有一个文件无论如何。

.remove()方法用于“删除”整个文档。 .update()方法对文档进行“更改”。