Räknar verkar som en av de saker som borde vara billiga, men ofta inte är det. Eftersom mongo inte upprätthåller en räkning av antalet dokument som matchar vissa kriterier i sitt b-tree-index, måste den skanna igenom indexräkningsdokumenten allt eftersom. Det betyder att att räkna 100 gånger dokumenten kommer att ta 100 gånger så lång tid, och det är ungefär vad vi ser här -- 0.018 * 100 = 1.8s
.
För att påskynda detta har du några alternativ:
- Det aktiva antalet är ungefär
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})
. Skulle detta vara tillräckligt korrekt för ditt användningsfall? - Alternativt kan du behålla en
counts
dokument i en separat samling som du håller synkroniserad med antalet aktiva/inaktiva dokument som du har.