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

如何在NodeJS中统计MongoDB指定条件的总行数?

解决MongoDB统计特定条件数据行数的问题

看起来你是想用Mongoose统计nama_materi等于"HTML"的文档总数对吧?你的原代码用find()会返回所有匹配的文档,而直接加count()不生效,是因为现在Mongoose已经废弃了旧的count()方法,改用更可靠的countDocuments()啦。

我给你两种可行的修改方案:

回调函数风格(和你原代码风格一致)

getTotalListHTML: (req, res, next) => {
  modelsListMateris.countDocuments({ nama_materi: 'HTML' }, (err, totalCount) => {
    if (err) {
      return res.send(err); // 优先处理错误
    }
    res.send({ total_html_materi: totalCount }); // 返回结构化结果,前端更容易处理
  });
}

异步/等待(Async/Await)风格(更现代易读)

如果你习惯用Promise风格的代码,这个写法会更清晰:

getTotalListHTML: async (req, res, next) => {
  try {
    const totalCount = await modelsListMateris.countDocuments({ nama_materi: 'HTML' });
    res.send({ total_html_materi: totalCount });
  } catch (err) {
    res.send(err);
  }
}

为什么原方法不生效?

在旧版本的Mongoose中,find()返回的Query对象支持链式调用count(),但这个方法已经被标记为废弃——因为在分片集群或有索引的场景下,它的计数结果可能不准确。官方推荐用countDocuments()来替代,它会精确统计匹配查询条件的文档数量。

要是你需要针对整个集合的大致计数(不需要筛选条件),可以用estimatedDocumentCount(),但它不支持查询条件,所以不适合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:29:24