You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除MongoDB特定问题下特定回答中的指定评论?

删除特定问题下指定回答中的指定评论(基于Mongoose Schema)

要实现该删除操作,你可以利用Mongoose的updateOne结合$pull操作符,精准定位目标文档、目标回答后移除对应评论,具体实现如下:

核心依赖标识

你需要三个关键值来定位目标:

  • 目标问题的唯一标识(比如Question字段内容,或更可靠的identification字段,注意你的Schema里重复定义了identification,建议修正为仅保留一个)
  • 目标回答的ansId
  • 目标评论的commentId

代码实现

假设你的Mongoose Model名为Query(由QueryScheme生成),代码示例:

// 假设已完成Model定义:const Query = mongoose.model('Query', QueryScheme);

// 填入实际的目标标识
const targetQuestion = "需要定位的问题文本";
const targetAnsId = "目标回答的ansId";
const targetCommentId = "要删除的评论commentId";

// 执行删除
Query.updateOne(
  // 查询条件:匹配目标问题 + 包含目标回答的文档
  {
    Question: targetQuestion,
    "answers.ansId": targetAnsId
  },
  // 更新操作:移除目标回答下的指定评论
  {
    $pull: {
      "answers.$.comments": { commentId: targetCommentId }
    }
  }
)
.then(res => {
  if (res.modifiedCount > 0) {
    console.log("评论删除成功");
  } else {
    console.log("未找到匹配的问题、回答或评论");
  }
})
.catch(err => {
  console.error("删除操作失败:", err);
});

代码说明

  1. 查询逻辑:通过Question定位目标问题文档,同时通过"answers.ansId"确保文档包含目标回答。
  2. 更新逻辑:$pull用于从数组中移除匹配元素;answers.$中的$是位置操作符,代表查询到的第一个目标回答的位置,后续对该回答的comments数组执行移除,删除commentId匹配的评论。

额外提示

  • 若Question字段可能重复,建议改用identification作为问题唯一标识(需先修正Schema中重复定义identification的问题),避免误操作。
  • 你的Schema中postedOn默认值写为Date.now()会导致所有新文档的时间固定为Schema定义时的时间,应改为default: Date.now(不带括号,传递函数引用,创建文档时才会取当前时间)。

内容的提问来源于stack exchange,提问作者AYUSH KUMAR SINGHAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:07:35