Liczenie wydaje się jak jedna z tych rzeczy, które powinny być tanie, ale często nie są. Ponieważ mongo nie przechowuje liczby dokumentów spełniających określone kryteria w swoim indeksie b-drzewa, musi skanować dokumenty zliczania indeksów w miarę postępu. Oznacza to, że policzenie 100 razy dokumentów zajmie 100 razy więcej czasu i mniej więcej to widzimy tutaj -- 0.018 * 100 = 1.8s
.
Aby to przyspieszyć, masz kilka możliwości:
- Aktywna liczba to mniej więcej
estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})
. Czy to byłoby wystarczająco dokładne dla Twojego przypadku użycia? - Alternatywnie możesz utrzymywać
counts
dokument w oddzielnej kolekcji, którą synchronizujesz z liczbą aktywnych/nieaktywnych dokumentów, które posiadasz.