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

Mongoose报错:Model.findOneAndRemove()不再支持回调函数

解决Mongoose findOneAndRemove() 不支持回调的问题

你遇到的错误是因为Mongoose 6.x及以上版本已移除对回调函数的支持,findOneAndRemove() 现在仅返回Promise,无法再传入回调参数。以下是两种可行的修改方案:

方案1:使用Promise的then/catch替代回调

app.post("/delete", (req, res) => {
  Data.findOneAndRemove({ _id: req.get("id") })
    .then(deletedItem => {
      if (deletedItem) {
        console.log("删除成功:", deletedItem);
        res.send("Deleted!");
      } else {
        console.log("未找到要删除的文档");
        res.status(404).send("Document not found");
      }
    })
    .catch(err => {
      console.log("删除失败:", err);
      res.status(500).send("Failed to delete document");
    });
});

方案2:使用async/await(更简洁易读)

app.post("/delete", async (req, res) => {
  try {
    const deletedItem = await Data.findOneAndRemove({ _id: req.get("id") });
    if (deletedItem) {
      console.log("删除成功:", deletedItem);
      res.send("Deleted!");
    } else {
      console.log("未找到要删除的文档");
      res.status(404).send("Document not found");
    }
  } catch (err) {
    console.log("删除失败:", err);
    res.status(500).send("Failed to delete document");
  }
});

额外优化建议

  • 原代码中无论删除是否成功都会立即返回"Deleted!",这会导致客户端收到错误反馈,上面的方案已修正该问题:删除成功返回成功响应,找不到目标文档返回404状态码,出现异常返回500状态码。
  • findOneAndRemove() 在Mongoose 6.x中已被标记为废弃,推荐使用findOneAndDelete() 替代,用法完全一致,更符合当前API规范:
    // 替换为findOneAndDelete
    const deletedItem = await Data.findOneAndDelete({ _id: req.get("id") });
    

内容的提问来源于stack exchange,提问作者siddharth sonkusre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:04