我有一个模型用户和另一个模型任务。用户有许多任务,并且在每个任务上都有一个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
的解决方案颇为精明,而且我感觉缺少某些东西。