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

调用接口时Mongoose的countDocuments方法不生效该如何解决?

错误原因

调用Mongoose的countDocuments方法时,你同时使用了回调传参和await/.then()的Promise调用两种方式,Mongoose会判定需要两次执行该查询,因此抛出「Query was already executed」的错误。你之前去掉async/await语法后仍报错,是因为代码里还是同时存在回调传参和.then()调用,仍然属于两种执行方式混用。
另外你原来的回调写法逻辑也存在问题:countDocuments的回调第一个参数为错误对象,第二个参数才是统计结果,你只写了(count)=>count会直接把错误对象当成统计结果,逻辑完全错误。

修复方案

两种调用方式二选一即可,不要混用:

方案1:async/await写法(推荐)

router.get(`/get/count`,  async (req, res) => {
  try {
    // 不要传入回调,直接await获取返回结果
    const productCount = await Product.countDocuments()
    if (!productCount) {
      return res.status(500).json({ success: false });
    }
    return res.send({
      productCount: productCount
    });
  } catch (err) {
    return res.status(500).json({ success: false, error: err.message })
  }
});

方案2:仅使用回调写法

router.get(`/get/count`, (req, res) => {
  Product.countDocuments((err, count) => {
    if (err) {
      return res.status(500).json({ success: false, error: err.message })
    }
    if (!count) {
      return res.status(404).json({ success: false })
    }
    return res.send({ productCount: count })
  })
});

内容的提问来源于stack exchange,提问作者Veera Silamban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:24:02