我正在尝试删除一本引用了这些章节的书。当我删除这本书时,我希望删除所有相关章节。但是我没有成功从DB中删除章节文档。这是我如何删除它。
首先是控制器方法:
exports.delete = async(req, res) => {
const book = await Book.findOne({ id: req.params.id});
await book.remove();
res.redirect(`/`);
}
之后,pre('remove')
挂钩被触发:
bookSchema.pre('remove', function(next){
Chapter.findOneAndRemove({book_id: this.id});
next();
});
我还尝试了document.remove()
和Model.deleteMany()
,但文档仍然存在。没有错误,钩子中间件被触发。我意识到在代码示例中我只删除一个文档而不是文档,但即使这样也行不通。这本书会从数据库中删除,但章节仍然存在。
答案 0 :(得分:-1)
remove()
或deleteMany()
是在调用next()
中间件之前应该使用async / await或callbacks的异步函数:
bookSchema.pre('remove', async function(next) {
await Chapter.deleteMany({book_id: this._id}).catch(function (err) {
console.log(err);
});
next();
});