Mongodb Primary Key: Eksempel på at sætte _id felt med ObjectId()

⚡ Smart opsummering

MongoDB Primærnøgle er _id-feltet, der entydigt identificerer hvert dokument i en samling. Som standard indeholder det et automatisk genereret ObjectId, men du kan også tildele din egen værdi til _id-feltet, når du indsætter et dokument.

  • 🔑 Primær nøglerolle: Feltet _id er den primære nøgle, der entydigt identificerer hvert dokument i en MongoDB samling.
  • 🆔 Standard objekt-id: Hvis du udelader _id, MongoDB tilføjer automatisk en unik 12-byte ObjectId-værdi til dokumentet.
  • ⏱️ Tidsbestemt: Et ObjectId starter med et 4-byte tidsstempel, så ID'er kan nogenlunde sorteres efter oprettelsestidspunkt.
  • ✍️ Brugerdefinerede nøgler: Du kan angive din egen _id-værdi, f.eks. et tal eller en streng, når du indsætter et dokument.
  • 🔒 Uforanderlig: Når værdien _id er angivet, kan den ikke ændres. Du skal slette den og indsætte den igen for at ændre den.

Hvad er Primary Key in MongoDB?

In MongoDB, _id felt som den primære nøgle for samlingen, så hvert dokument kan identificeres entydigt i samlingen. Feltet _id indeholder en unik ObjectID-værdi.

Som standard, når du indsætter dokumenter i samlingen, hvis du ikke tilføjer et feltnavn med _id i feltnavnet, MongoDB vil automatisk tilføje et objekt-id-felt som vist nedenfor

Primær nøgle ind MongoDB

Når du forespørger på dokumenterne i en samling, kan du se ObjectId for hvert dokument i samlingen.

Hvis du vil sikre dig det MongoDB opretter ikke _id-feltet, når samlingen oprettes, og hvis du ønsker at angive dit eget id som samlingens _id, skal du udtrykkeligt definere dette, mens du opretter samlingen.

Når du eksplicit opretter et id-felt, skal det oprettes med _id i navnet.

Lad os se på et eksempel på, hvordan vi kan opnå dette.

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

Code Forklaring:

  1. Vi antager, at vi opretter det første dokument i samlingen, og derfor definerer vi i ovenstående erklæring, mens vi opretter samlingen, eksplicit feltet _id og definerer en værdi for det.

Hvis kommandoen udføres med succes og nu bruger find kommandoen til at vise dokumenterne i samlingen, vil følgende output blive vist

Output:

Primær nøgle ind MongoDB

Outputtet viser tydeligt, at det _id-felt, vi definerede under oprettelsen af ​​samlingen, nu bruges som den primære nøgle til samlingen.

Hvad er ObjectId i MongoDB?

Et ObjectId er standardværditypen, der MongoDB tildeler til primærnøglen _id. Det er en 12-byte identifikator, der er designet til at være globalt unik på tværs af servere og samlinger, så to dokumenter næsten aldrig får den samme værdi. Fordi klientdriveren kan generere et ObjectId uden at spørge serveren, MongoDB kan indsætte dokumenter hurtigt og skalere på tværs af mange maskiner uden en central tæller.

Hvert ObjectId gemmes i kompakt binær form, men vises som en hexadecimal streng på 24 tegn, for eksempel ObjectId("507f1f77bcf86cd799439011"). De første bytes er baseret på det aktuelle tidspunkt, hvilket betyder, at værdierne stiger støt, efterhånden som dokumenter oprettes. Dette gør ObjectId ikke kun unikt, men også nogenlunde sorterbart efter indsættelsesrækkefølge, en nyttig egenskab, når du vil have de nyeste eller ældste poster først.

Struktur af en MongoDB ObjectId

A MongoDB ObjectId er præcis 12 bytes langt, og hver del har en specifik betydning. Forståelse af strukturen hjælper med at forklare, hvorfor ObjectIds er unikke og tidsordnede:

  • 4-byte tidsstempel: Antallet af sekunder siden Unix-epoken, der registrerer, hvornår ObjectId'et blev oprettet. Dette gør ID'er sorterbare efter tid.
  • 5-byte tilfældig værdi: En værdi, der genereres én gang pr. proces, og som kombinerer maskin- og procesidentiteten, så forskellige klienter producerer forskellige ID'er.
  • 3-byte inkrementeringstæller: En tæller, der starter fra en tilfældig værdi og stiger med hvert nyt ObjectId i samme sekund, hvilket forhindrer kollisioner under hurtige indsættelser.

Sammen garanterer disse tre dele, at hvert ObjectId er unikt, selv når mange dokumenter indsættes på samme tid på tværs af forskellige servere. Du kan læse det indlejrede oprettelsestidspunkt når som helst ved at kalde getTimestamp()-metoden på et ObjectId.

Fordele ved at bruge ObjectId som primærnøgle

Brug af standard ObjectId som primærnøgle _id giver flere praktiske fordele, hvilket er grunden til, at de fleste MongoDB samlinger er afhængige af det:

  • Automatisk generering: Du behøver ikke selv at oprette eller administrere nøgleværdier, hvilket reducerer risikoen for dubletter af nøgler.
  • Global unikhed: Objekt-Id'er forbliver unikke på tværs af servere, så de fungerer godt i distribuerede og shardede implementeringer.
  • Indbygget tidsstempel: Det integrerede oprettelsestidspunkt giver dig mulighed for at sortere eller filtrere dokumenter efter alder uden et ekstra datofelt.
  • Høj ydeevne: Klientsidegenerering undgår en rundtur til serveren, keeping indsætter hurtigt.

Selvom ObjectId passer til de fleste applikationer, kan du stadig vælge et brugerdefineret _id, f.eks. en e-mailadresse eller produktkode, når en naturlig forretningsnøgle gør forespørgsler enklere. Det rigtige valg afhænger af, hvordan du planlægger at slå dine data op og relatere dem.

Ofte Stillede Spørgsmål

Nej. Feltet _id kan ikke ændres, når et dokument er oprettet. For at ændre det skal du slette det eksisterende dokument og indsætte et nyt med den ønskede _id-værdi.

Feltet _id accepterer de fleste BSON-typer, herunder ObjectId, heltal, strenge og endda indlejrede dokumenter. Den eneste regel er, at værdien skal være unik inden for samlingen og ikke må være et array.

Ja. MongoDB opretter automatisk et unikt indeks i _id-feltet for hver samling. Dette indeks kan ikke slettes og gør opslag efter primærnøgle meget hurtige.

AI kan forklare et ObjectIds tidsstempel, generere kode til f.eks.tract oprettelsestidspunkt med getTimestamp(), og konverter ObjectIds til strenge, helping udviklere foretager fejlfinding og forstår dokumentidentifikatorer hurtigere.

Ja. AI kan rådgive om, hvorvidt standardobjekt-id'et skal beholdes, eller om et brugerdefineret _id, såsom en e-mail eller et UUID, skal bruges, baseret på dine forespørgselsmønstre, unikke behov og sharding-planer.

Opsummer dette indlæg med: