Zählabfragen, indexiert oder anderweitig, sind langsam, da MongoDB immer noch einen vollständigen B-Tree-Walk durchführen muss, um die entsprechende Anzahl von Dokumenten zu finden, die Ihren Kriterien entsprechen. Der Grund dafür ist, dass die B-Tree-Struktur von MongoDB nicht "gezählt" wird, was bedeutet, dass jeder Knoten keine Informationen über die Anzahl der Elemente im Knoten/Teilbaum speichert.
Beachten Sie auch, dass die db.col.count()-Version (also keine Kriterien) eine große Abkürzung nehmen kann und keine Abfrage tatsächlich durchführt, daher ist sie schnell. Allerdings wird nicht immer derselbe Wert gemeldet wie bei einer count-Abfrage, die alle Elemente zurückgeben sollte (z. B. nicht in Sharding-Umgebungen mit hohem Schreibdurchsatz). Ob das ein Bug ist, steht zur Debatte. Ich denke schon.
Beachten Sie, dass in 2.3+ eine signifikante Optimierung eingeführt wurde, die die Leistung von Zählungen in indizierten Feldern verbessern sollte (und tut). Siehe:https://jira.mongodb.org/browse/SERVER-7745