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

Mongoose findOneAndDelete重复调用仍返回成功问题排查与修复

删除用户API重复调用响应异常的修复方案

你的问题出在对findOneAndDelete方法的返回值判断逻辑错误:

  • 当调用findOneAndDelete未找到匹配文档时,MongoDB不会抛出错误(err依然为null),只会返回null作为查询结果。
  • 原代码仅通过!err判断成功,导致第二次调用时,即便文档已被删除,依然会进入成功分支返回删除提示。

修复后的代码如下:

router.delete('/api/admin/deleteUsers/:id', (req, res, next) => {
  users.findOneAndDelete({ _id: req.params.id}, function (err, deletedDoc) {
    if (err) {
      // 处理数据库操作异常(比如ID格式错误等)
      return res.status(500).send('Database error');
    }
    if (deletedDoc) {
      res.send("Id " + req.params.id + " has been deleted");
    } else {
      res.send('Item not found');
    }
  });
});

关键修改点:

  • 增加对deletedDoc的判断:如果该值存在,说明确实删除了匹配的文档;如果为null,则表示无对应文档可删。
  • 单独处理数据库操作异常(比如传入的ID格式不符合MongoDB ObjectId规范时,会抛出err),避免将操作异常误判为"未找到条目"。

内容的提问来源于stack exchange,提问作者Chris Stephens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:02