Wygląda na to, że mój komentarz został trochę źle zrozumiany, więc wyjaśnię. Nie ma znaczenia, kiedy to wywołasz, o ile zostanie wywołane w pewnym momencie przed pierwszym wywołaniem find(). Innymi słowy, nie ma znaczenia, kiedy tworzysz indeks, o ile jest tam, zanim spodziewasz się go użyć.
Częstym wzorcem, który często widziałem, jest kodowanie ensureIndex
w tym samym czasie (i w tym samym miejscu) co find()
połączenie. ensureIndex
sprawdzi, czy indeks istnieje i utworzy go, jeśli nie. Jest niewątpliwy pewien narzut (choć bardzo mały) w wywoływaniu funkcji secureindex przed wywołaniem find(), więc lepiej tego nie robić.
Dzwonię do ensureIndex
w kodzie, aby uprościć wdrożenia i uniknąć konieczności oddzielnego zarządzania bazą danych i bazą kodu. Kompromis polegający na łatwości wdrożenia równoważy nadmiarowość kolejnych wywołań zapewniania indeksu (dla mnie).