Mongoose pre hook for remove 方法不起作用

编程入门 行业动态 更新时间:2024-10-05 07:27:50

Mongoose pre hook for remove 方法<a href=https://www.elefans.com/category/jswz/34/1771377.html style=不起作用"/>

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 方法不起作用

本文发布于:2024-05-31 01:52:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771152.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不起作用   方法   pre   Mongoose   remove

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!