Преброяването изглежда като едно от онези неща, които би трябвало да са евтини, но често не са. Тъй като mongo не поддържа преброяване на броя на документите, които отговарят на определени критерии в индекса на b-дървото, той трябва да сканира документите за броене на индекса, докато върви. Това означава, че преброяването на документите 100 пъти ще отнеме 100 пъти повече време и това е приблизително това, което виждаме тук -- 0.018 * 100 = 1.8s
.
За да ускорите това, имате няколко опции:
- Активният брой е приблизително
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})
. Това ще бъде ли достатъчно точно за вашия случай на употреба? - Алтернативно можете да поддържате
counts
документ в отделна колекция, която поддържате в синхрон с броя активни/неактивни документи, които имате.