mongodb.countDocuments当结果集很大时速度很慢
用户收集测试数据:
'active''inactive'该字段status已索引 {status: 1}
db.users.countDocuments({status: 'active'})需要 2.91 秒
db.users.countDocuments({status: 'inactive'})需要 0.018 秒
据我所知,countDocuments使用聚合来查找和计算结果。
estimatedDocumentCount() 在这种情况下不起作用,因为需要查询过滤器
有什么改进建议吗?
wil*_*lis 14
计数似乎是一件应该很便宜的事情,但事实往往并非如此。由于 mongo 不会在其 B 树索引中维护符合特定条件的文档数量计数,因此它需要扫描索引计数文档。这意味着计算 100 倍的文档将花费 100 倍的时间,这大致就是我们在这里看到的 -- 0.018 * 100 = 1.8s。
为了加快速度,您有以下几种选择:
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}). 这对于您的用例来说足够准确吗?counts在单独的集合中维护文档,使其与您拥有的活动/非活动文档的数量保持同步。