mongodb.countDocuments
在结果集很大时会变慢
有关用户集合的测试数据:
'active'
'inactive'
的10万份文档字段status
的索引为{status:1}
db.users.countDocuments({status: 'active'})
耗时2.91秒
db.users.countDocuments({status: 'inactive'})
花费0.018秒
我了解到countDocuments
使用团聚来查找和计算结果。
estimatedDocumentCount
()在这种情况下不起作用,因为需要查询过滤器
有什么改进建议吗?
答案 0 :(得分:0)
计数似乎就像应该便宜的东西之一,但通常并非如此。由于mongo不会在其b树索引中维护符合特定条件的文档数量的计数,因此它需要在索引计数过程中一直扫描整个文档。这意味着计算100倍的文档将花费100倍的时间,而这大致就是我们在这里看到的-0.018 * 100 = 1.8s
。
要加快速度,您有几种选择:
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})
。这样对您的用例足够准确吗?counts
文档,该文档与您拥有的活动/不活动文档的数量保持同步。