如何在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
相关产品推荐
相关产品推荐

