据我所知,官方 MongoDB 驱动程序提供了“计数”和“估计文档计数”API。前者命令非常占用内存,因此建议在需要时使用后者。
但是,这个估计的文档计数有多准确?在生产环境中是否可以信任计数,或者当需要绝对准确性时推荐使用计数 API?
据我所知,官方 MongoDB 驱动程序提供了“计数”和“估计文档计数”API。前者命令非常占用内存,因此建议在需要时使用后者。
但是,这个估计的文档计数有多准确?在生产环境中是否可以信任计数,或者当需要绝对准确性时推荐使用计数 API?
在我看来,比较这两者时很难想象一种情况需要使用countDocuments()
而不是estimatedDocumentCount()
。
也就是说,estimatedDocumentCount()
的等效形式是countDocuments({})
,即一个空的查询过滤器。第一个函数的成本为O(1)
;而第二个函数的成本为O(N)
,如果N
非常大,则成本将是禁止的。
两者都返回一个计数,在Mongo被部署的情况下,这个计数很可能是相当短暂的,即它一旦被获取就会失准,因为集合发生了变化。
estimatedDocumentCount()
,它与查询无关。如果您正在寻找满足某些查询条件的文档总数,则(a)不能使用estimatedDocumentCount()
,(b)也不会使用countDocuments()
的无参版本。 - Allan Bazinet相比之下,countDocuments()的MongoDB文档指出,此方法是一个包装器,执行$group聚合阶段来$sum结果集,确保计数的绝对准确性。
因此,如果绝对准确性很重要,则使用countDocuments()。 如果您只需要大致估算,请使用estimatedDocumentCount()。 名称准确地反映了其用途,应相应地使用。
主要的区别在于过滤。
count_documents
可以像普通查询一样进行过滤,而 estimated_document_count
则不能。
如果过滤不是您使用情况的一部分,那么我建议使用 estimated_document_count
,因为它速度更快。
estimatedDocumentCount()
存在之前,那里只有一个答案间接地提到了该方法。 - Dan Dascalescu