据我所知,MongoDB官方驱动程序提供了“计数”和“估计文档计数” API,据我所知,前一个命令占用大量内存,因此建议在需要时使用后者。
但是这个估计的文件计数有多准确?是否可以在生产环境中信任计数,还是在需要绝对精度时建议使用计数API?
All*_*net 14
比较这两者,对我来说很难想象出一个你想要使用countDocuments()whenestimatedDocumentCount()是一个选项的场景。
即,相当于形式estimatedDocumentCount()就是countDocuments({}),即,空的查询过滤器。第一个函数的代价是O(1);第二个是O(N),如果N很大,成本会高得离谱。
两者都返回一个计数,在部署了 Mongo 的场景中,它可能是非常短暂的,即,随着集合的变化,它在您拥有它的那一刻是不准确的。
请查看MongoDB 文档中的EstimatedDocumentCount()。具体来说,他们注意到“在使用 Wired Tiger 存储引擎不正常关闭 mongod 后,db.collection.estimatedDocumentCount() 报告的计数统计可能不准确。” 这是由于元数据用于计数和检查点漂移,通常会在 60 秒左右后解决。
相比之下,countDocuments()的MongoDB 文档指出此方法是一个包装器,它对结果集执行$group聚合阶段$sum,确保计数的绝对准确性。
因此,如果绝对精度至关重要,请使用countDocuments(). 如果您只需要粗略估计,请使用estimatedDocumentCount(). 这些名称是准确的,应相应地使用。
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |