最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Mongoose pre hook for remove 方法不起作用

网站源码admin32浏览0评论

Mongoose pre hook for remove 方法不起作用

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",
    });
  }
};

现在,当您从客户端删除帖子时,帖子及其相关评论都将被删除。

发布评论

评论列表(0)

  1. 暂无评论