Chiave primaria Mongodb: esempio per impostare il campo _id con ObjectId()
โก Riepilogo intelligente
MongoDB La chiave primaria รจ il campo _id che identifica in modo univoco ogni documento in una raccolta. Per impostazione predefinita, contiene un ObjectId generato automaticamente, ma รจ anche possibile assegnare un valore personalizzato al campo _id durante l'inserimento di un documento.

Che cos'รจ la chiave primaria? MongoDB?
In MongoDB, campo _id come chiave primaria per la raccolta in modo che ogni documento possa essere identificato in modo univoco nella raccolta. Il campo _id contiene un valore ObjectID univoco.
Per impostazione predefinita, quando inserisci documenti nella raccolta, se non aggiungi un nome di campo con _id nel nome del campo, allora MongoDB aggiungerร automaticamente un campo ID oggetto come mostrato di seguito
Quando esegui una query sui documenti in una raccolta, puoi visualizzare ObjectId per ciascun documento nella raccolta.
Se vuoi assicurartelo MongoDB non crea il campo _id quando viene creata la raccolta e se desideri specificare il tuo ID come _id della raccolta, devi definirlo esplicitamente durante la creazione della raccolta.
Quando si crea esplicitamente un campo ID, รจ necessario crearlo con _id nel nome.
Diamo un'occhiata a un esempio su come possiamo raggiungere questo obiettivo.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Spiegazione:
- Supponiamo di creare il primo documento nella raccolta e quindi nell'istruzione precedente durante la creazione della raccolta definiamo esplicitamente il campo _id e ne definiamo un valore.
Se il comando viene eseguito correttamente e ora si utilizza il comando find per visualizzare i documenti nella raccolta, verrร visualizzato il seguente output
Produzione:
L'output mostra chiaramente che il campo _id che abbiamo definito durante la creazione della raccolta รจ ora utilizzato come chiave primaria per la raccolta.
Che cos'รจ ObjectId in MongoDB?
Un ObjectId รจ il tipo di valore predefinito che MongoDB assegna alla chiave primaria _id. Si tratta di un identificatore di 12 byte progettato per essere univoco a livello globale tra server e raccolte, in modo che due documenti non ricevano quasi mai lo stesso valore. Poichรฉ il driver client puรฒ generare un ObjectId senza chiedere al server, MongoDB Consente di inserire documenti rapidamente e di scalare su piรน macchine senza bisogno di un contatore centrale.
Ogni ObjectId viene memorizzato in formato binario compatto, ma viene visualizzato come una stringa esadecimale di 24 caratteri, ad esempio ObjectId("507f1f77bcf86cd799439011"). I primi byte si basano sull'ora corrente, il che significa che i valori aumentano progressivamente con la creazione dei documenti. Questo rende ObjectId non solo univoco, ma anche approssimativamente ordinabile in base all'ordine di inserimento, una proprietร utile quando si desidera visualizzare prima i record piรน recenti o piรน vecchi.
Struttura di a MongoDB ID oggetto
A MongoDB L'ObjectId รจ lungo esattamente 12 byte e ogni parte ha un significato specifico. Comprendere la struttura aiuta a spiegare perchรฉ gli ObjectId sono univoci e ordinati cronologicamente:
- Timestamp di 4 byte: Il numero di secondi trascorsi dall'epoca Unix, che registra il momento in cui l'ObjectId รจ stato creato. Questo permette di ordinare gli ID in base al tempo.
- Valore casuale di 5 byte: Un valore generato una sola volta per processo, che combina l'identitร della macchina e quella del processo, in modo che client diversi producano ID diversi.
- Contatore incrementale a 3 byte: Un contatore che parte da un valore casuale e aumenta a ogni nuovo ObjectId inserito nello stesso secondo, prevenendo collisioni durante gli inserimenti rapidi.
Insieme, queste tre componenti garantiscono che ogni ObjectId sia univoco, anche quando molti documenti vengono inseriti contemporaneamente su server diversi. ร possibile leggere l'ora di creazione incorporata in qualsiasi momento richiamando il metodo getTimestamp() su un ObjectId.
Vantaggi dell'utilizzo di ObjectId come chiave primaria
L'utilizzo dell'ObjectId predefinito come chiave primaria _id offre diversi vantaggi pratici, motivo per cui la maggior parte MongoDB Le collezioni dipendono da questo:
- Generazione automatica: Non รจ necessario creare o gestire manualmente i valori chiave, riducendo cosรฌ la possibilitร di chiavi duplicate.
- Unicitร a livello globale: Gli ObjectId rimangono univoci tra i server, quindi funzionano bene nelle implementazioni distribuite e frammentate.
- Timestamp incorporato: La funzione di incorporamento dell'ora di creazione consente di ordinare o filtrare i documenti in base alla data senza dover inserire un campo data aggiuntivo.
- Alte prestazioni: La generazione lato client evita un viaggio di andata e ritorno al server, mantenendoping si inserisce rapidamente.
Sebbene ObjectId sia adatto alla maggior parte delle applicazioni, รจ comunque possibile scegliere un _id personalizzato, come un indirizzo email o un codice prodotto, quando una chiave aziendale intuitiva semplifica le query. La scelta giusta dipende da come si intende ricercare e correlare i dati.


