首页 > 解决方案 > 为什么 PyMongo count_documents 比 count 慢?

问题描述

db['TF']有大约 6000 万条记录。

我需要获取记录的数量。

如果我运行db['TF'].count(),它会立即返回。

如果我运行db['TF'].count_documents({}),那么在我得到结果之前需要很长时间。

但是,该count方法将被弃用。

那么,如何在使用时快速获取数量count_documents呢?我错过了一些论点吗?

我已经阅读了文档和代码,但没有找到。

非常感谢!

标签: mongodbmongodb-querypymongopymongo-3.x

解决方案


这不是关于 PyMongo 而是关于 Mongo 本身。

count是一个原生的 Mongo 函数。它并没有真正计算所有文件。每当您在 Mongo 中插入或删除记录时,它都会缓存集合中的记录总数。然后,当您运行时count,Mongo 将返回该缓存值。

count_documents使用查询对象,这意味着它必须遍历所有记录才能获得总计数。因为您没有传递任何参数,所以它必须运行所有 6000 万条记录。这就是为什么它很慢。

基于@Stennie 评论

您可以在 PyMongo 3.7+ 中使用estimated_document_count() 根据集合元数据返回快速计数。最初的 count() 已被弃用,因为根据是否提供了查询条件,行为会有所不同(估计与实际计数)。较新的驱动程序 API 更注重结果


推荐阅读