Sembra che il mio commento sia stato un po' frainteso, quindi chiarirò. Non importa quando lo chiami purché venga chiamato a un certo punto prima di chiamare find() per la prima volta. In altre parole, non importa quando crei l'indice, purché sia presente prima che ti aspetti di usarlo.
Un modello comune che ho visto molto è la codifica di ensureIndex
allo stesso tempo (e nello stesso posto) di find()
chiamata. ensureIndex
verificherà se l'indice esiste e lo creerà in caso contrario. C'è indubbiamente un sovraccarico (anche se molto piccolo) nella chiamata asureindex prima di chiamare a find() quindi è preferibile non farlo.
Chiamo ensureIndex
nel codice per semplificare le implementazioni ed evitare di dover gestire il db e la codebase separatamente. Il compromesso tra la facilità di implementazione bilancia la ridondanza delle chiamate successive per garantireIndex (per me.)