据我所知,MongoDB官方驱动程序提供了“计数”和“估计文档计数” API,据我所知,前一个命令占用大量内存,因此建议在需要时使用后者。
但是这个估计的文档计数有多准确?可以在生产环境中信任计数吗?还是在需要绝对精度时建议使用计数API?
答案 0 :(得分:1)
将两者进行比较,对我来说,很难想象出当countDocuments()
是一种选择时您想使用estimatedDocumentCount()
的情况。
也就是说,estimatedDocumentCount()
的等效形式为countDocuments({})
,即空查询过滤器。第一个函数的成本为O(1)
;第二个是O(N)
,如果N
很大,那么成本将是惊人的。
两者都返回一个计数,在部署Mongo的情况下,这很可能只是短暂的,即,随着集合的更改,获取计数的那一刻是不准确的。
答案 1 :(得分:0)
请查看MongoDB documentation for estimatedDocumentCount()。他们特别指出,“在使用Wired Tiger存储引擎对mongod进行不干净的关闭后,db.collection.estimatedDocumentCount()报告的计数统计信息可能不准确。”这是由于元数据用于计数和检查点漂移,通常会在60秒左右后解决。
相反,MongoDB documentation for countDocuments()表示此方法是包装器,它对$group
结果集执行$sum
聚合阶段,从而确保计数的绝对准确性。
因此,如果绝对精度至关重要,请使用countDocuments()
。如果您只需要粗略估计,请使用estimatedDocumentCount()
。名称准确无误,应相应使用。