gpt4 book ai didi

node.js - 如何正确删除 MongoDB 中的孤立引用?

转载 作者:可可西里 更新时间:2023-11-01 10:00:26 25 4
gpt4 key购买 nike

因此,我正在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com