У меня есть модель User и другая модель Task.У пользователя есть много задач, и для каждой задачи есть свойство 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();
});
Это промежуточное программное обеспечение Mongoose запускается этим маршрутом (в 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, которое обеспечивает аутентификацию пользователя и заполняет req.user
документом аутентифицированного пользователя.
Я понимаю, что Model.findOneAndDelete
возвращает объект запроса, и это то, что связано с this
в промежуточном программном обеспечении Mongoose - что не особенно полезно для меня, так как я бы предпочел, чтобы Документ пользователя был связан с this
.
Мое решение извлечь _id
из объекта запроса кажется довольно нечастым, и я чувствую, что что-то упустил.