Ho un campo ID univoco di tipo int
nei miei documenti. Sto facendo ensureIndex
su questo campo, ma i miei documenti contengono ancora _id
. Posso liberarmene?MongoDB: è possibile evitare di utilizzare il campo _id automatico?
risposta
Dal docs ...
Se un utente tenta di inserire un documento senza fornire un campo _id, il database genererà automaticamente un oggetto ide conservarlo campo _id.
Tuttavia, è possibile assegnare il proprio valore alla _id ...
Il valore _id può essere di qualsiasi tipo, ad eccezione array, fino a quando si tratta di un unico .
La domanda migliore è il motivo per cui si dovrebbe creare il proprio ID univoco, creare un indice su di esso e rimuovere il molto utile ObjectID _id che è indicizzato automaticamente?
Tutti i piloti ufficiali utilizzare ObjectID e ha un sacco di ottimi aspetti ad esso:
E 'un timestamp costruito (in modo che non c'è bisogno di memorizzare un campo data nella vostra documento, e puoi usarlo per ordinare per data.)
È un "numero di sequenza globale, uniformemente crescente" --- vale a dire sarà ancora univoco tra i server se hai bisogno di dividere i tuoi dati, ecc.
No, non è possibile liberarsene, it is there by design, ma è possibile mappare l'identificativo univoco int
allo _id
stesso quando si inseriscono documenti.
Una buona idea è quella di memorizzare l'hash nel campo _id.
Pertanto, il database non creerà automaticamente il campo _id perché sarà già esistente e si salverà lo spazio di un indice inutilizzato.
Basta impostare il campo _id come qualsiasi altro con il valore desiderato (il tuo hash per esempio). Ma attenzione, deve essere unico!
Per garantire unicità si deve o renderlo unico o mettere un documento secondario nel campo _id: {_id: {h: [yourHash], u: [un identificatore univoco]} ...}
Questo è esattamente quello che ho fatto, uccidendo due piccioni con un solo colpo: i miei documenti non contengono un enorme ObjectID e non ho bisogno di chiamare 'ensureIndex' dopo ogni inserto - Ho ottenuto un significativo aumento di velocità (non avrei mai pensato' ensureIndex 'è così lento). –
@Viriolet Giraffe: Non c'è bisogno di chiamare 'ensureIndex' dopo ogni inserimento - deve solo essere chiamato una volta nella vita del database, proprio come con MySQL. Inoltre, 'ObjectID' non è davvero un campo 'enorme'. Tuttavia, sono d'accordo sul fatto che usare un hash abbia senso. Nella discussione sull'hash vs object id vs. guid, assicurati di comprendere le implicazioni a lungo termine della coerenza e delle potenziali chiavi shard. – mnemosyn
- 1. mongoose (mongodb) Alias _id campo
- 2. node.js mongodb .. il campo (immutabile) '_id' è stato trovato modificato
- 3. mongodb $ not _id
- 4. È possibile restituire un campo calcolato da una query MongoDB?
- 5. MongoDB seleziona dove nella matrice di _id?
- 6. Qual è il modo corretto di interrogare MongoDB per _id usando la stringa usando Python?
- 7. MongoDB - Aggiorna campo se il nuovo valore è maggiore
- 8. È possibile configurare il nome del campo predefinito ObjectId in MongoDB?
- 9. Qual è la migliore rappresentazione per il campo _id di mongo in postgresql?
- 10. Mappa MongoDB _id utilizzando il plug-in Play-Reactivemongo?
- 11. Come interrogare i documenti usando il campo "_id" nel driver Java mongodb?
- 12. C'è un limite alla lunghezza dei _id in MongoDB
- 13. Meraviglia: MongoDB _id è univoco per impostazione predefinita?
- 14. È MongoDB _id (ObjectId) generato in ordine crescente?
- 15. Restituisce il tipo effettivo di un campo in MongoDB
- 16. È possibile utilizzare il polimorfismo/ereditarietà nel driver C# DocumentDb
- 17. Rimuovi da _id nella console MongoDB
- 18. È possibile disabilitare il completamento automatico?
- 19. è possibile l'aggiornamento automatico in Android senza utilizzare Android Market?
- 20. mongoexport senza _id field
- 21. Informazioni sul campo "_id" in Android SQLite
- 22. Upserts in mongodb quando si utilizzano valori _id personalizzati
- 23. Mangusta che recupera dati senza campo _id
- 24. Django campo suffisso ForeignKey con _id
- 25. Quadro di aggregazione MongoDB - Rinomina campo dinamico
- 26. mongo _id errore chiave duplicato campo
- 27. Differenza tra i campi "id" e "_id" in MongoDB
- 28. Ottieni _id di un documento inserito in MongoDB?
- 29. Come posso evitare che il riempimento automatico di IE form compili un campo honeypot?
- 30. Come posso evitare il completamento automatico di Firefox?
Grazie tu! Sono nuovo di MongoDB e ho perso la parte della documentazione che hai citato. E grazie per aver spiegato i vantaggi dell'utilizzo di ObjectID. Comunque, voglio usare il mio ID perché è un hash (e ho bisogno di memorizzarlo comunque nel mio documento), ed è più piccolo di ObjectID. –
Felice di aiutare, è ovvio su ciò che è meglio per la tua applicazione, ma ho trovato che l'ObjectID è molto utile in una serie di situazioni a cui non avrei pensato quando ho iniziato. Divertiti, http://learnmongo.com potrebbe essere utile anche per te! –
Grazie per l'ottimo link! –