不起作用"/>
Mongoose pre hook for remove 方法不起作用
我有两个独立的模型:发布和评论。 Comment 模型有一个名为“post”的字段,它指的是一个 post 对象。我在帖子模型中使用
pre
钩子来删除与帖子相关的所有评论。我正在尝试从客户端删除帖子,但只会删除帖子本身,不会删除评论。我无法弄清楚为什么会这样。
这是后期模型的钩子
postSchema.pre("remove", async function (next) {
try {
const commentIds = thisments.map((comment) => comment.toString());
await this.model("Comment").deleteMany({
_id: {
$in: commentIds,
},
});
next();
} catch (err) {
next(err);
}
});
这是路由回调函数
const deletePost = async (req, res) => {
try {
await Post.findByIdAndRemove(req.params.id);
res.status(200).json({
message: "Post deleted successfully",
});
} catch (error) {
res.status(500).json({
message: "Error deleting post",
});
}
};
回答如下:
这没有按预期工作的原因是因为用于删除 Post 文档的方法:findByIdAndRemove()。在 Mongoose 中,此方法不会触发删除中间件,因此不会删除相关评论。
这个问题的解决方法是先使用findById()获取Post文档,然后对获取的文档调用remove()方法。这将触发 remove 中间件,并且关联的 Comment 文档将按预期删除。
这是更新的功能:
const deletePost = async (req, res) => {
try {
const post = await Post.findById(req.params.id);
if (!post) {
return res.status(404).json({
message: "Post not found",
});
}
await post.remove();
res.status(200).json({
message: "Post and associated comments deleted successfully",
});
} catch (error) {
res.status(500).json({
message: "Error deleting post",
});
}
};
现在,当您从客户端删除帖子时,帖子及其相关评论都将被删除。
更多推荐
Mongoose pre hook for remove 方法不起作用
发布评论