MongoDB FindCursor获取文档数遇困:count已弃用,countDocuments不可用
解决MongoDB Node.js驱动5.1.0中FindCursor的文档计数问题
先理清报错原因
你之前调用users.countDocuments报错,核心原因是**countDocuments和estimatedDocumentCount是集合(Collection)对象的方法,并非FindCursor的方法**,不能在find返回的游标上调用,得直接在集合实例上使用。
分场景解决计数需求
场景1:仅需文档数量,不需要获取文档内容
直接用集合的countDocuments或estimatedDocumentCount,传入对应查询条件即可:
// 精确计数(会扫描符合条件的文档,结果准确) const count = await users.countDocuments({ /* 你的查询条件 */ }); // 快速估算计数(基于集合元数据,速度快但结果可能有误差) const estimatedCount = await users.estimatedDocumentCount();
场景2:已拿到FindCursor,同时需要文档内容和数量
如果已经通过find获取了游标,还想同时拿到文档和计数,可以把游标转成数组后取长度:
const cursor = users.find({ /* 你的查询条件 */ }); const docs = await cursor.toArray(); const count = docs.length; // 后续可直接使用docs中的文档数据
注意:如果查询结果数据量极大,toArray()会把所有文档加载到内存,可能引发性能问题,这种情况建议用下面的方法。
场景3:大数据量场景,避免加载所有文档到内存
可以遍历游标逐个计数,不会一次性占用大量内存:
const cursor = users.find({ /* 你的查询条件 */ }); let count = 0; await cursor.forEach(() => { count++; }); // 最终count即为游标对应的文档总数
内容的提问来源于stack exchange,提问作者Starnec
相关产品推荐
相关产品推荐

