猫鼬:delete用于级联删除的中间件不起作用

问题描述 投票:0回答:2

在Mongoose 5.7.13中不推荐使用remove,我想改用deleteOne。我需要获取已删除文档的ID,以便随后可以级联删除其他集合中的其他相关文档。我认为中间件预挂钩中的“ this”是指删除的文档,但它只是一个空对象。是否有一个规范的工作示例?我目前仍在使用5.7.12-这会有所作为吗?

这里是我目前正在使用的代码。问题在于,由于引用完全为空,因此我一开始无法获得projectId。在发布后而不是在发布前执行此操作,或者将选项切换为在查询上运行而不是在文档上运行都会产生相同的结果。

ProjectSchema.pre("deleteOne", {document:true}, (next) => {
  const projectId = this._id;
  ListModel.find({parentProject:projectId}, (err, lists) => {
    if(err){
      console.log("error cascading project delete to lists", {err});
    }
    lists.map(list => {
      ListModel.deleteOne({_id:list._id}, (err, result) => {
        if(err) {
          console.log("error on project delete cascade", {err});
        }
      });
    });
  });
});

在Mongoose 5.7.13中不推荐使用remove,我想改用deleteOne。我需要获取已删除文档的ID,以便随后可以删除其他集合中的其他相关文档...

mongodb mongoose middleware mongoose-remove mongoose-deleteone
2个回答
0
投票

这取决于您是在文档上还是在模型上调用deleteOne。后者只是没有文档来绑定。


0
投票

您可以使用findOneAndDelete发布中间件。

© www.soinside.com 2019 - 2024. All rights reserved.