2013-04-06 34 views
6

Ad esempio, cosa succede se mi piacerebbe avere Username come ID univoco del mio documento mongo invece di avere "_id" predefinito?MongoDB: Come impostare un altro campo (diverso da _id) come ID del documento mongo?

mi piacerebbe ottenere questo console mongo.exe utilizzando.

+2

Se i nomi utente potrebbe mai cambiare, e sono utilizzati in altri documenti, vi consiglio di non fare loro la chiave primaria ('_id') come avrete bisogno di aggiornare tutte le posizioni che puntano al nuovo nome utente (e avrai un problema di temporizzazione in quanto non ci sono transazioni in MongoDB). – WiredPrairie

risposta

14

MongoDB richiede la proprietà _id come chiave primaria unica che indicizza automaticamente.

si hanno due opzioni:

  1. utilizzare la proprietà _id e impostarlo con il nome utente.
  2. Creare una proprietà nomeutente, quindi aggiungere un indice su quella nuova proprietà. Avrai ancora _id, ma puoi eseguire query usando il nome utente.
+1

So che è possibile avere un record come {username: "John", età: 12}. Voglio dire, senza _id. Come fare questo? – Andrei

+2

Perché vuoi rimuovere _id? – cirrus

+3

Quando si definisce l'indice del nome utente è possibile richiedere che sia univoco, se è la vostra preoccupazione. _id è piccolo e utile. Basta lasciarlo da solo e ignorarlo finché non si capisce molto meglio mongodb. – Leopd

0

so, che è possibile avere tale record come {nome utente: "John", età: 12}. Voglio dire, senza _id. Come fare questo?

Non sono sicuro di come la risposta di @Serges non fosse abbastanza chiara, tuttavia, per ripetere, non c'è modo. Tecnicamente puoi ancora estrarre _id in una collezione ridotta in alcune versioni di MongoDB, ma a parte questo non puoi.

Anche io sono preoccupato per l'utilizzo del nome utente, potrebbe non essere la cosa migliore per attività come sharding e potrebbe creare "hotspot" di alta acitivty su cluster ecc., È tutto teorico poiché non sono nella tua posizione con i tuoi dati, tuttavia, è meglio considerare questa roba.

+0

Grazie per le risposte, ma voglio solo sapere, come è possibile. Lascia che ti fornisca ulteriori dettagli. Sto usando il driver .NET e posso scrivere in questo modo: classe Utente { [Bsonid] public string Username {get; impostato; } public string Password {get; impostato; }} Quando ho messo oggetto di tale classe in MongoDB, io sono sempre oggetto senza _id, e sono curioso di sapere, in che modo il driver interpretare questo oggetto. Come appare l'operazione? – Andrei

+0

@AndreiMikhalevich Aspetta, "Quando metto l'oggetto di tale classe in mongodb, ottengo oggetto senza _id", cosa intendi? Stai dicendo che stai salvando un oggetto con _id e che non ha _id nel database? Questo dovrebbe essere impossibile – Sammaye

+0

@AndreiMikhalevich: Se inserisci un oggetto senza '_id', il driver C# ne genererà uno per te.'_id' è una chiave primaria richiesta per un documento MongoDB; puoi scegliere di utilizzare i tuoi identificatori o utilizzare l'[ObjectID] predefinito (http://docs.mongodb.org/manual/reference/object-id/). – Stennie

1

_id è importante nella replicazione. È possibile creare una raccolta senza un indice _id, ma è possibile che non sia mai in grado di replicare il database. La replica richiede l'indice _id su ogni raccolta.

Problemi correlati