首页 > 解决方案 > 如何使用中间件从 MongoDb 中删除孤立引用

问题描述

因此,我在节点中构建了一个项目,用户可以在其中上传图像,并且我在两个不同的 js 文档中有两个不同的模式,“帖子”和“用户”,它们是链接的。
这是用户架构:

 const userSchema = new Schema({ 
    email: {
    type: String,
    required: true,
    unique: true
    },
    posts: [ { type: Schema.Types.ObjectId,
        ref: "Upload" } ],
    favourites: [ {
        type: Schema.Types.ObjectId,
        ref: "Upload"  } ]
});
module.exports = mongoose.model("User", userSchema);

这是上传模式:

const uploadSchema = new mongoose.Schema({
  title: String,
  caption: String,
  image: 
    {
      url: String,
      filename: String
    },
  author: {
    type: Schema.Types.ObjectId,
    ref: "User"
  },
  comments: [ {  type: Schema.Types.ObjectId,
      ref: "Comment" }
  ],
  likes: [],
  dislikes: []
});
module.exports = mongoose.model('Upload', uploadSchema);

我使用 findOneAndDelete 操作删除帖子。我正在尝试编写一个中间件,以便在删除帖子时,它也会从其作者用户的“帖子”数组以及可能喜欢它的任何用户的“收藏夹”数组中删除。
这是我尝试从“posts”数组中删除已删除帖子的孤立 ID 的中间件,但它不起作用,我什至不理解错误消息:

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

老实说,我不知道中间件是如何工作的,有人有什么建议吗?

标签: javascriptnode.jsmongodb

解决方案


推荐阅读