Hopp til innhold

MongoDB ObjectID Generator - Opprett Unike BSON-identifikatorer

Generer unike MongoDB ObjectIDs umiddelbart med vårt gratis online-verktøy. Opprett gyldige 12-byte BSON-identifikatorer for testing, utvikling og databaseoperasjoner. Ingen installasjon nødvendig.

MongoDB ObjectID Generator

Lastekalkulator...
📚

Dokumentasjon

Hva er en MongoDB ObjectID?

En MongoDB ObjectID er en verdi på 12 byte som MongoDB som standard tildeler feltet _id i hvert dokument. Den skrives som 24 små heksadesimale tegn, for eksempel 507f1f77bcf86cd799439011. Dette verktøyet genererer mellom 1 og 100 gyldige ObjectID-er om gangen, direkte i nettleseren, uten behov for databasetilkobling.

MongoDB ObjectID-struktur

En ObjectID består av tre deler som står etter hverandre:

  • Tidsstempel (4 byte). Antallet sekunder siden 1. januar 1970 (Unix-epoken), lagret som et fortegnløst tall i big-endian-format. Det angir når ObjectID-en ble opprettet. Fire byte kan inneholde verdier fra 0 til 4 294 967 295, så feltet går tilbake til 0 etter 7. februar 2106, 06:28:15 UTC.
  • Tilfeldig verdi (5 byte). Et tilfeldig valgt tall som velges én gang når et program starter. Alle ObjectID-er programmet oppretter senere, bruker den samme tilfeldige verdien, slik at forskjellige datamaskiner ikke trenger å samordne seg.
  • Teller (3 byte). Et tall som starter på et tilfeldig punkt mellom 0 og 16 777 215 og økes med 1 for hver nye ObjectID. Hvis den går forbi 16 777 215, går den tilbake til 0.

Når delene settes etter hverandre, ser de slik ut:

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Eldre MongoDB-drivere bygde den midterste delen av en maskinidentifikator og en prosess-ID i stedet for et tilfeldig tall. Dagens drivere, inkludert logikken bak dette verktøyet, bruker i stedet én tilfeldig verdi på 5 byte per prosess.

MongoDB ObjectID-format og formel

Det finnes ingen aritmetisk formel bak en ObjectID, i motsetning til en prosentberegning eller en renteberegning. Den settes sammen ved å konvertere tre tall til heksadesimal tekst og sette dem etter hverandre:

  1. Ta gjeldende tid i sekunder siden Unix-epoken, lagt innenfor området 0 til 4 294 967 295 slik at den får plass i fire byte. Skriv den som et heksadesimalt tall med 8 sifre.
  2. Ta prosessens faste tilfeldige verdi, et tall fra 0 til og med 2^40 − 1. Skriv den som et heksadesimalt tall med 10 sifre.
  3. Ta tellerens gjeldende verdi, fra 0 til 16 777 215. Skriv den som et heksadesimalt tall med 6 sifre, og øk deretter telleren med 1 for neste ID.
  4. Sett de tre heksadesimale tekststrengene sammen i denne rekkefølgen til én streng på 24 tegn.

Regneeksempel

Anta at et program starter ved Unix-tid 1 700 000 000 sekunder, som er 14. november 2023, 22:13:20 UTC. Det velger den tilfeldige verdien 3f2a91c8d4 og starter telleren på 12 345.

  • Tidsstempel i heksadesimal form: 6553f100
  • Tilfeldig verdi i heksadesimal form: 3f2a91c8d4
  • Teller i heksadesimal form: 003039

Når disse settes sammen, får vi den første ObjectID-en:

6553f1003f2a91c8d4003039

Hvis programmet genererer en ny ObjectID i samme sekund, forblir tidsstempelet og den tilfeldige verdien uendret, men telleren økes til 12 346 (00303a):

6553f1003f2a91c8d400303a

Det er også mulig å lese en ObjectID i motsatt retning. Gitt 507f1f77bcf86cd799439011 dekodes de første 8 tegnene, 507f1f77, til 1 350 508 407 sekunder siden epoken, som er 17. oktober 2012, 21:13:27 UTC.

Vanlige bruksområder for MongoDB ObjectID-er

  • Primærnøkler. MongoDB legger automatisk en ObjectID i feltet _id i et dokument, med mindre en annen verdi oppgis.
  • Oppslag etter opprettelsestidspunkt. Siden tidsstempelet er innebygd, kan et program lese dokumentets omtrentlige opprettelsestidspunkt uten et separat datofelt.
  • Sortering etter innsettingsrekkefølge. Sortering av dokumenter etter _id sorterer dem omtrent etter opprettelsestidspunkt, siden tidsstempelet kommer først i verdien.
  • Test- og mockdata. Utviklere bruker genererte ObjectID-er til å bygge eksempel-dokumenter eller automatiserte tester uten å kjøre en database.

MongoDB ObjectID sammenlignet med UUID

En UUID (universelt unik identifikator) er en verdi på 16 byte, fire byte større enn en ObjectID. En standard-UUID er vanligvis tilfeldig gjennom hele verdien, så den avslører ikke opprettelsestidspunktet og sorteres ikke etter opprettelsesrekkefølge. En ObjectID er kortere og omtrent tidsordnet, noe som er én grunn til at MongoDB bruker den som standard, selv om den ikke har den samme formelle garantien for unikhet som en korrekt generert UUID.

Ofte stilte spørsmål

Hva brukes en MongoDB ObjectID til? Den er standardverdien MongoDB legger i feltet _id i et dokument, slik at hvert dokument får en unik nøkkel uten ekstra oppsett.

Er MongoDB ObjectID-er garantert å være unike? Ikke i en formell, matematisk forstand, men kollisjoner er svært usannsynlige. To ObjectID-er måtte ha samme tilfeldige verdi og samme tellerposisjon i samme sekund, noe som normalt bare skjer innenfor én prosess.

Kan opprettelsesdatoen leses fra en ObjectID? Ja. De første 8 heksadesimale tegnene, 4 byte, inneholder antallet sekunder siden Unix-epoken. Når dette tallet konverteres til en dato, får man det omtrentlige opprettelsestidspunktet.

Hvor mange ObjectID-er kan denne generatoren lage om gangen? Mellom 1 og 100 per parti. Alle ID-ene i et parti deler den samme prosessomfattende tilfeldige verdien, og hver av dem har en teller som er én høyere enn den forrige.

Kan MongoDB ObjectID-er brukes utenfor MongoDB? Ja. Siden de bare er verdier på 12 byte kodet som heksadesimal tekst, fungerer de også som unike ID-er i andre systemer, selv om systemets eget ID-opplegg kan passe bedre til behovene.

Er denne generatoren koblet til en ekte MongoDB-database? Nei. Den kjører utelukkende i nettleseren og leser ikke fra eller skriver til noen database.

Referanser

  1. "ObjectId." MongoDB-håndboken, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." MongoDB BSON-spesifikasjoner, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." BSON-spesifikasjon, https://bsonspec.org/spec.html.