ell*_*oM8 4 mongodb node.js mongodb-query
因此,我正在 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
});
Run Code Online (Sandbox Code Playgroud)
我的问题是当你删除一个帖子时,你会如何删除用户帖子数组中的引用?我的想法是我可以创建一个中间件在删除路由之前运行并在我实际删除帖子之前删除用户帖子数组中的引用。这会被认为是最好的方法吗?我在 Stack 上找到了一篇文章,它在架构中使用了“pre”函数,如下所示:
// ./models/post
PostSchema.pre('remove', function(next){
this.model('User').remove({posts: this._id}, next);
});
Run Code Online (Sandbox Code Playgroud)
这是实际的堆栈帖子:在 MongoDB 中删除时自动删除引用对象。我无法得到这项工作。但是,我确实实现了一个自定义中间件来删除引用,但觉得这可能不是最佳实践。任何提示/建议将不胜感激。谢谢!
你不想.remove()在这里,但你想.update()用$pull,而不是:
PostSchema.pre('update',function(next) {
this.model('User').update(
{ },
{ "$pull": { "posts": this._id } },
{ "multi": true },
next
);
})
Run Code Online (Sandbox Code Playgroud)
这是从数组中删除某些内容的正确操作。“multi”确保所有User引用它的对象的“post”都会被删除,认为它可能真的只是一个文档。
该.remove()方法用于“删除”整个文档。该.update()方法对文档进行“更改”。
| 归档时间: |
|
| 查看次数: |
2448 次 |
| 最近记录: |