猫鼬Model.findOneAndDelete中间件未绑定受影响的文档

时间:2019-05-09 15:44:54

标签: mongoose

我有一个模型用户和另一个模型任务。用户有许多任务,并且在每个任务上都有一个owner属性,该属性中填充了创建该任务的用户的_id。

我正在尝试创建级联删除机制,以便在删除用户时,他们的所有任务也将被删除。

在我的模式中,我具有以下Mongoose中间件:

    userSchema.pre('findOneAndDelete', async function beforeFindOneAndDelete(next) {
      const query = this;

      const {_id} = this.getQuery;
    
      await Task.deleteMany({
        owner: query.getQuery()._id,
      });
    
      next();
    });

此猫鼬中间件由以下路由触发(在Express.js中):

router.delete('/users/me', auth, async (req, res) => {
  try {
    await User.findOneAndDelete({
      _id: req.user._id,
    });

    return res.send(req.user);
  } catch (error) {
    return res.status(500).send();
  }
});

auth指的是Express.js Middelware,它确保对用户进行身份验证,并使用经过身份验证的用户文档填充req.user

我了解到Model.findOneAndDelete返回了一个查询对象,这就是Mongoose中间件中绑定到this的内容-对我来说不是特别有用,因为我希望用户的文档是绑定到this

我从查询对象中提取_id的解决方案颇为精明,而且我感觉缺少某些东西。

0 个答案:

没有答案