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

标签 node.js mongodb 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
});

我的问题是,当您删除帖子时,您将如何删除用户帖子数组中的引用?我的想法是我可以创建一个中间件在删除路由之前运行,并在我实际删除帖子之前删除用户帖子数组中的引用。这会被认为是最好的方法吗?我在 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/

相关文章:

javascript - sequelize (SQL) 等待数组更新

node.js - 如何在 Mongoose Schema 中要求嵌套的 json 对象

javascript - Angularjs,ng-click,如何将复选框数组放入 MongoDB

mongodb - 如何规范化/减少 mongoDB 中的时间数据?

javascript - 数据未存储在 Mongodb 中

java - mongodb如何在JAVA中将_id转换为String

node.js - 在 AWS Lambda 中使用 node.js 连接视频

javascript - $lookup 后的聚合过滤器

java - 如何使用 Java 对 MongoDB 中的文档进行批量更新?

javascript - React Axios 输入未定义