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.

  • ๐Ÿ”‘ Ruolo chiave principale: Il campo _id รจ la chiave primaria che identifica in modo univoco ogni documento in un MongoDB Collection
  • ๐Ÿ†” ObjectId predefinito: Se ometti _id, MongoDB Aggiunge automaticamente al documento un valore ObjectId univoco di 12 byte.
  • ๏ธ In ordine cronologico: Un ObjectId inizia con un timestamp di 4 byte, quindi gli ID sono approssimativamente ordinabili in base all'ora di creazione.
  • โœ๏ธ Tasti personalizzati: รˆ possibile specificare un valore _id personalizzato, ad esempio un numero o una stringa, durante l'inserimento di un documento.
  • ๐Ÿ”’ Immutabile: Una volta impostato, il valore di _id non puรฒ essere modificato; per cambiarlo รจ necessario eliminarlo e reinserirlo.

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

Chiave primaria inserita MongoDB

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:

  1. 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:

Chiave primaria inserita MongoDB

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.

DOMANDE FREQUENTI

No. Il campo _id รจ immutabile una volta creato un documento. Per modificarlo, รจ necessario eliminare il documento esistente e inserirne uno nuovo con il valore _id desiderato.

Il campo _id accetta la maggior parte dei tipi BSON, inclusi ObjectId, numeri interi, stringhe e persino documenti incorporati. L'unica regola รจ che il valore deve essere univoco all'interno della raccolta e non puรฒ essere un array.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. MongoDB Crea automaticamente un indice univoco sul campo _id per ogni collezione. Questo indice non puรฒ essere eliminato e rende le ricerche tramite chiave primaria estremamente veloci.

L'IA puรฒ spiegare il timestamp di un ObjectId, generare codice per spiegaretractempo di creazione con getTimestamp() e convertire ObjectIds in stringhe, aiutaping Gli sviluppatori possono eseguire il debug e comprendere piรน rapidamente gli identificatori dei documenti.

Sรฌ. L'IA puรฒ consigliare se mantenere l'ObjectId predefinito o utilizzare un _id personalizzato, come un indirizzo email o un UUID, in base ai modelli di query, alle esigenze di unicitร  e ai piani di sharding.

Riassumi questo post con: