Ho letto da qualche parte che la chiamata ensureIndex()
crea effettivamente una raccolta se non esiste. Ma l'indice è sempre su alcuni campi, non su tutti, quindi se assicuro un indice su { name:1 }
e poi aggiungo documenti a quella raccolta che hanno molti più campi, l'indice funzionerà? So che non abbiamo uno schema, proveniente dal mondo RDBMS, voglio solo essere sicuro. :) Mi piacerebbe creare indici quando il mio sito web inizia, ma inizialmente il database è vuoto. Non ho bisogno di avere dati prima di garantire gli indici, è corretto?Va bene chiamare sureIndex su raccolte inesistenti?
risposta
ensureIndex
creerà la raccolta se non esiste ancora. Non importa se aggiungi documenti che non hanno la proprietà coperta dall'indice, non puoi semplicemente usare quell'indice per trovare quei documenti. Il modo in cui ho capito è che nelle versioni precedenti alla 1.7.4 un documento che manca una proprietà per la quale esiste un indice verrà indicizzato come se avesse quella proprietà, ma avrà un valore nullo. Nelle versioni successive alla 1.7.4 è possibile creare indici sparsi che non includono affatto questi oggetti. La differenza è lieve ma potrebbe essere significativa in alcune situazioni.
A seconda delle circostanze, potrebbe non essere una buona idea creare indici quando viene avviata l'app. Si consideri la situazione in cui si distribuisce una nuova versione che aggiunge nuovi indici all'avvio, in fase di sviluppo non si noterà questo dato che si dispone solo di un piccolo database, ma in produzione si può avere un enorme database e l'aggiunta richiederà molto tempo di tempo. Durante la creazione dell'indice la tua app si bloccherà e non potrai servire le richieste. È possibile creare indici con il flag di sfondo impostato su true (la sintassi dipende dal driver che si sta utilizzando), ma nella maggior parte dei casi è preferibile aggiungere gli indici manualmente o come parte di uno script di installazione. In questo modo dovrai pensare prima di aggiornare gli indici.
- 1. Va bene non chiamare Thread # join?
- 2. Va bene chiamare clearInterval() prima di setInterval()?
- 3. memcacheD Va bene?
- 4. Va bene liberare 'void *'?
- 5. Va bene avere parentesi nell'URL?
- 6. Va bene creare un UIView su un thread in background?
- 7. Perché non va bene che le variabili siano globali ma va bene per le funzioni?
- 8. Va bene usare target = "_ blank" in HTML5?
- 9. Va bene restituire None da __new__?
- 10. Va bene confrontare i valori di PEPROCESS?
- 11. Va bene usare LinearLayout invece di FrameLayout?
- 12. A cosa non va bene ASP.NET MVC?
- 13. Va bene usare l'array [chiave] in PHP?
- 14. Va bene passare SQLCommand come parametro?
- 15. Va bene usare try catch inside, infine?
- 16. Stringhe casuali in Python 2.6 (Va bene?)
- 17. Va bene lanciare gli eventi da Dispose()?
- 18. Va bene lasciare un canale aperto?
- 19. Va bene implementare Modernizr con Twitter Bootstrap?
- 20. string [length()] in C++, va bene?
- 21. In JavaScript, l'assegnazione concatenata va bene?
- 22. È ambiguo o va perfettamente bene?
- 23. Va bene usare AWT con JavaFx?
- 24. Va bene chiamare metodi non statici con call_user_func in PHP 5.3?
- 25. Delphi: Va bene per un modulo liberarlo da solo?
- 26. Va bene cambiare l'adattatore di ListView in modo dinamico?
- 27. Va bene memorizzare l'ID di sessione in localStorage?
- 28. Va bene troncare un hash SHA256 a 128 bit?
- 29. Flexbox non funziona correttamente su Firefox ma va bene su Chrome & Safari
- 30. Google maps su Android non funziona su app ma demo va bene
Sto utilizzando ASP.NET MVC e il driver C# in modo specifico, ma ritengo che la questione sia indipendente dalla tecnologia. Non ho pensato di inserire le chiamate di indicizzazione nel mio script di compilazione, tuttavia, il che sembra interessante, ho bisogno di scoprire come chiamare 'ensureIndex' dalla riga di comando. –
Penso che dovrebbe essere possibile chiamare 'ensureIndex' da uno script JS caricato attraverso la shell mongo. –
È possibile eseguire un file JavaScript con 'mongo nome_db script.js'. Quel file può contenere molte cose che puoi digitare nella console di Mongo. – Theo