mongodb - 为什么 PyMongo count_documents 比 count 慢?
问题描述
我db['TF']
有大约 6000 万条记录。
我需要获取记录的数量。
如果我运行db['TF'].count()
,它会立即返回。
如果我运行db['TF'].count_documents({})
,那么在我得到结果之前需要很长时间。
但是,该count
方法将被弃用。
那么,如何在使用时快速获取数量count_documents
呢?我错过了一些论点吗?
我已经阅读了文档和代码,但没有找到。
非常感谢!
解决方案
这不是关于 PyMongo 而是关于 Mongo 本身。
count
是一个原生的 Mongo 函数。它并没有真正计算所有文件。每当您在 Mongo 中插入或删除记录时,它都会缓存集合中的记录总数。然后,当您运行时count
,Mongo 将返回该缓存值。
count_documents
使用查询对象,这意味着它必须遍历所有记录才能获得总计数。因为您没有传递任何参数,所以它必须运行所有 6000 万条记录。这就是为什么它很慢。
基于@Stennie 评论
您可以在 PyMongo 3.7+ 中使用estimated_document_count() 根据集合元数据返回快速计数。最初的 count() 已被弃用,因为根据是否提供了查询条件,行为会有所不同(估计与实际计数)。较新的驱动程序 API 更注重结果
推荐阅读
- php - Codeigniter Right Join with Where 条件不给出结果
- angular - 避免未使用的资产 Angular
- visual-studio-code - 我的 vs code python 路径显示了 2 个不同的路径?一白一蓝
- r - R data.table - 如何按降序指定变量?
- javascript - 如何解决javascript幻灯片在angularjs路由后不自动显示
- r - R工作室中的小提琴情节
- javascript - Outlook Online 如何下载附件?
- ios - 从 ChildViewController 呈现 UIAlertViewController
- typescript - 在对象内将一种 TypeScript 类型与另一种类型交换
- laravel - 取消订阅令牌未发送到电子邮件?