删除文档在mongoose pre('remove')挂钩中不起作用

时间:2018-01-23 19:04:50

标签: javascript node.js mongodb mongoose

我正在尝试删除一本引用了这些章节的书。当我删除这本书时,我希望删除所有相关章节。但是我没有成功从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(),但文档仍然存在。没有错误,钩子中间件被触发。我意识到在代码示例中我只删除一个文档而不是文档,但即使这样也行不通。这本书会从数据库中删除,但章节仍然存在。

1 个答案:

答案 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();
});