Počítání zdá se jako jedna z věcí, která by měla být levná, ale často není. Protože mongo neuchovává počet dokumentů, které odpovídají určitým kritériím ve svém indexu b-stromu, potřebuje průběžně skenovat dokumenty s počítáním indexů. To znamená, že stonásobné počítání dokumentů zabere 100krát více času, a to je zhruba to, co vidíme zde -- 0.018 * 100 = 1.8s
.
Chcete-li to urychlit, máte několik možností:
- Aktivní počet je zhruba
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})
. Bylo by to dostatečně přesné pro váš případ použití? - Případně můžete udržovat
counts
dokument v samostatné kolekci, kterou udržujete synchronizovanou s počtem aktivních/neaktivních dokumentů, které máte.