如何在MongoDB Shell中统计集合的记录总数?
MongoDB 统计集合记录总数量的实现方法
完全没必要先调用db.collectionName.find()拉取全量记录再在客户端手动计数,MongoDB内置了专门的计数方法,执行效率比全量拉取高几个量级。
精确统计全量记录总数(官方推荐方案)
调用countDocuments()方法,传入空匹配条件{}即可返回集合内真实的文档总条数,结果准确,适用于绝大多数需要精确计数的场景:// 统计集合所有记录总数量 db.collectionName.countDocuments({})如果需要统计符合特定筛选条件的记录数,直接把查询规则作为参数传入即可,比如统计
status字段值为active的记录总量:db.collectionName.countDocuments({ status: "active" })大数据量下快速估算总记录数
如果你的集合数据规模在千万级以上,且不需要100%精确的数值,仅需要判断数据量级,可以使用estimatedDocumentCount()方法。这个方法直接读取集合的元数据返回结果,哪怕是十亿级别的集合也能毫秒级响应,缺点是返回值为估算值,和真实数据量可能存在小幅偏差:// 快速估算集合总记录数(非精确值) db.collectionName.estimatedDocumentCount()
注意:旧版本MongoDB中常见的
db.collectionName.count()方法目前已经被官方标记为废弃,在分片集群、存在未完成写入事务的场景下会出现计数不准的问题,不建议继续使用。另外绝对不要通过find()拉取全量文档后在客户端统计长度,这种方式会把所有文档数据全量传输到客户端,既占用数据库带宽又消耗客户端内存,数据量稍大就会直接触发内存溢出、查询超时等问题。
内容的提问来源于stack exchange,提问作者Lemon
相关产品推荐
相关产品推荐

