Cheie primară Mongodb: exemplu pentru a seta câmpul _id cu ObjectId()

⚡ Rezumat inteligent

MongoDB Cheia primară este câmpul _id care identifică în mod unic fiecare document dintr-o colecție. În mod implicit, conține un ObjectId generat automat, dar puteți atribui și propria valoare câmpului _id atunci când inserați un document.

  • 🔑 Rol cheie principal: Câmpul _id este cheia primară care identifică în mod unic fiecare document dintr-un MongoDB de colectare.
  • 🆔 ID-ul obiectului implicit: Dacă omiteți _id, MongoDB adaugă automat o valoare ObjectId unică de 12 octeți la document.
  • ⏱️ Ordonat în funcție de timp: Un ObjectId începe cu o marcă temporală de 4 octeți, deci ID-urile pot fi sortate aproximativ după ora creării.
  • ✍️ Chei personalizate: Puteți furniza propria valoare _id, cum ar fi un număr sau un șir de caractere, atunci când inserați un document.
  • 🔒 Imuabil: Odată setată, valoarea _id nu poate fi modificată; trebuie să o ștergeți și să o reintroduceți pentru a o modifica.

Ce este cheia primară MongoDB?

In MongoDB, câmpul _id ca cheie primară pentru colecție, astfel încât fiecare document să poată fi identificat în mod unic în colecție. Câmpul _id conține o valoare unică ObjectID.

În mod implicit, atunci când inserați documente în colecție, dacă nu adăugați un nume de câmp cu _id în numele câmpului, atunci MongoDB va adăuga automat un câmp ID obiect, așa cum se arată mai jos

Cheia principală MongoDB

Când interogați documentele dintr-o colecție, puteți vedea ObjectId-ul pentru fiecare document din colecție.

Dacă doriți să vă asigurați că MongoDB nu creează câmpul _id atunci când colecția este creată și dacă doriți să specificați propriul dvs. id ca _id al colecției, atunci trebuie să definiți acest lucru în mod explicit în timp ce creați colecția.

Când se creează în mod explicit un câmp de id, acesta trebuie creat cu _id în numele său.

Să ne uităm la un exemplu despre cum putem realiza acest lucru.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code Explicaţie:

  1. Presupunem că creăm primul document din colecție și, prin urmare, în declarația de mai sus în timpul creării colecției, definim în mod explicit câmpul _id și definim o valoare pentru acesta.

Dacă comanda este executată cu succes și acum utilizați comanda find pentru a afișa documentele din colecție, va fi afișată următoarea ieșire

ieșire:

Cheia principală MongoDB

Rezultatul arată clar că câmpul _id pe care l-am definit în timpul creării colecției este acum folosit ca cheie primară pentru colecție.

Ce este ObjectId în MongoDB?

Un ObjectId este tipul de valoare implicit care MongoDB atribuie cheii primare _id. Este un identificator de 12 octeți conceput să fie unic la nivel global pe servere și colecții, astfel încât două documente nu primesc aproape niciodată aceeași valoare. Deoarece driverul client poate genera un ObjectId fără a solicita serverului, MongoDB poate introduce documente rapid și se poate scala pe mai multe mașini fără un ghișeu central.

Fiecare ObjectId este stocat într-o formă binară compactă, dar este afișat ca un șir hexazecimal de 24 de caractere, de exemplu ObjectId(„507f1f77bcf86cd799439011”). Primii octeți se bazează pe ora curentă, ceea ce înseamnă că valorile cresc constant pe măsură ce documentele sunt create. Acest lucru face ca ObjectId să nu fie doar unic, ci și să poată fi sortat aproximativ după ordinea de inserare, o proprietate utilă atunci când doriți ca cele mai noi sau cele mai vechi înregistrări să fie primele.

Structura a MongoDB ObjectId

A MongoDB ObjectId are exact 12 octeți lungime, iar fiecare parte are o semnificație specifică. Înțelegerea structurii ajută la explicarea motivului pentru care ObjectId-urile sunt unice și ordonate temporal:

  • marcaj temporal de 4 octeți: Numărul de secunde de la epoca Unix, înregistrând momentul în care a fost creat ObjectId-ul. Acest lucru face ca ID-urile să poată fi sortate după timp.
  • Valoare aleatorie pe 5 octeți: O valoare generată o singură dată per proces, combinând identitatea mașinii și a procesului, astfel încât diferiți clienți să producă ID-uri diferite.
  • Contor incremental pe 3 octeți: Un contor care pornește de la o valoare aleatorie și crește cu fiecare nou ObjectId în aceeași secundă, prevenind coliziunile în timpul inserărilor rapide.

Împreună, aceste trei părți garantează că fiecare ObjectId este unic, chiar și atunci când mai multe documente sunt inserate în același moment pe servere diferite. Puteți citi ora de creare încorporată în orice moment apelând metoda getTimestamp() pe un ObjectId.

Avantajele utilizării ObjectId ca cheie primară

Utilizarea ObjectId-ului implicit ca cheie primară _id oferă mai multe beneficii practice, motiv pentru care majoritatea MongoDB Colecțiile se bazează pe aceasta:

  • Generare automată: Nu trebuie să creați sau să gestionați singur valorile cheie, reducând astfel șansa de chei duplicate.
  • Unicitate globală: ID-urile de obiect rămân unice pe servere, așa că funcționează bine în implementări distribuite și fragmentate.
  • Marcaj temporal încorporat: Data creării încorporată vă permite să sortați sau să filtrați documentele după vechime, fără un câmp suplimentar pentru dată.
  • Performanta ridicata: Generarea pe partea de client evită o călătorie dus-întors către server, keeping se introduce rapid.

Deși ObjectId se potrivește majorității aplicațiilor, puteți alege în continuare un _id personalizat, cum ar fi o adresă de e-mail sau un cod de produs, atunci când o cheie de afaceri naturală simplifică interogările. Alegerea corectă depinde de modul în care intenționați să căutați și să corelați datele.

Întrebări frecvente

Nu. Câmpul _id este imuabil odată ce un document este creat. Pentru a-l modifica, trebuie să ștergeți documentul existent și să introduceți unul nou cu valoarea _id dorită.

Câmpul _id acceptă majoritatea tipurilor BSON, inclusiv ObjectId, numere întregi, șiruri de caractere și chiar documente încorporate. Singura regulă este că valoarea trebuie să fie unică în cadrul colecției și nu poate fi un array.

Da. MongoDB creează automat un index unic pentru câmpul _id pentru fiecare colecție. Acest index nu poate fi eliminat și face căutările după cheia primară foarte rapide.

IA poate explica marcajul temporal al unui ObjectId, poate genera cod pentru a exprimatracmomentul creării cu getTimestamp() și convertirea ObjectId-urilor în șiruri de caractere, ajutăping dezvoltatorii depanează și înțeleg identificatorii de documente mai rapid.

Da. Inteligența artificială poate oferi recomandări pentru păstrarea ObjectId-ului implicit sau utilizarea unui _id personalizat, cum ar fi o adresă de e-mail sau un UUID, în funcție de modelele de interogare, nevoile de unicitate și planurile de sharding.

Rezumați această postare cu: