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.

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


