scanAndOrder: true w danych wyjściowych wyjaśniania wskazuje, że zapytanie musi pobrać dokumenty, a następnie posortować je w pamięci przed zwróceniem danych wyjściowych. Jest to kosztowna operacja i będzie miała wpływ na wydajność zapytania.
Istnienie scanAndOrder: true jak również różnica w nscanned n w danych wyjściowych wyjaśniania wskazuje, że zapytanie nie używa optymalnego indeksu. W tym przypadku wydaje się, że trzeba wykonać skanowanie kolekcji. Możesz być w stanie złagodzić ten problem, dołączając klucze indeksu do swojego sort kryteria. Z moich testów:
db.posts.find({hashtags: /^noticias/ }).limit(15).sort({hashtags:1, rank : -1}).explain()
Nie wymaga skanowania i zamawiania, zwraca n i nscanned liczby rekordów, których szukasz. Oznaczałoby to również sortowanie według hashtags klucz, który może być przydatny lub nie, ale powinien zwiększyć wydajność zapytania.