因此,我正在 Node 中构建一个类似于博客的小型项目,但我遇到了孤立数据库引用的问题。我在相互引用的单独文件中有两个模型。
这是我的模型:
// ./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
});
我的问题是,当您删除帖子时,您将如何删除用户帖子数组中的引用?我的想法是我可以创建一个中间件在删除路由之前运行,并在我实际删除帖子之前删除用户帖子数组中的引用。这会被认为是最好的方法吗?我在 Stack 上找到了一篇在架构中使用“pre”函数的帖子,如下所示:
// ./models/post
PostSchema.pre('remove', function(next){
this.model('User').remove({posts: this._id}, next);
});
这是实际的堆栈帖子:Automatically remove referencing objects on deletion in MongoDB .虽然我无法完成这项工作。然而,我确实实现了一个自定义中间件来删除引用,但我觉得这可能不是最佳实践。任何提示/建议将不胜感激。谢谢!
最佳答案
你不想.remove()
在这里,但你想要 .update()
与 $pull
相反:
PostSchema.pre('update',function(next) {
this.model('User').update(
{ },
{ "$pull": { "posts": this._id } },
{ "multi": true },
next
);
})
这是从数组中删除某些内容的正确操作。 “multi”确保为所有引用它的 User
对象删除“post”,认为它可能真的只是一个文档。
.remove()
方法用于“删除”整个文档。 .update()
方法对文档进行“更改”。
关于node.js - 如何正确删除 MongoDB 中的孤立引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167286/