Le query di conteggio, indicizzate o meno, sono lente a causa del fatto che MongoDB deve ancora eseguire una passeggiata completa del b-tree per trovare il numero appropriato di documenti che corrispondono ai tuoi criteri. La ragione di ciò è che la struttura b-tree di MongoDB non viene "contata", il che significa che ogni nodo non memorizza informazioni sulla quantità di elementi nel nodo/sottoalbero.
Il problema è segnalato qui https://jira.mongodb.org/browse/SERVER-1752 e attualmente non esiste una soluzione alternativa per migliorare le prestazioni se non il mantenimento manuale di un contatore per quella raccolta che ovviamente ha alcuni aspetti negativi.
Nota anche che la versione db.col.count() (quindi nessun criterio) può prendere una grande scorciatoia e in realtà non esegue una query, quindi è velocità. Detto questo, non riporta sempre lo stesso valore di una query di conteggio che dovrebbe restituire tutti gli elementi (ad esempio, non sarà in ambienti partizionati con un throughput di scrittura elevato). In discussione se sia o meno un bug. Penso di sì.
Si noti che in 2.3+ è stata introdotta un'ottimizzazione significativa che dovrebbe (e lo fa) migliorare le prestazioni dei conteggi sui campi indicizzati. Vedere:https://jira.mongodb.org/browse/SERVER-7745