Hva er en MongoDB ObjectId?

En MongoDB ObjectId er en 12-byte (24 hex-tegn) unik identifikator som brukes som standard _id-felt for hvert dokument i en MongoDB-samling. Strukturen er ikke tilfeldig — den koder meningsfull informasjon. De første fire bytene lagrer et Unix-tidsstempel som representerer sekundet ObjectId-en ble opprettet. De resterende bytene inneholder en tilfeldig verdi og en inkrementerende teller for å garantere unikhet selv når flere dokumenter settes inn i samme sekund på samme maskin.

Siden opprettelsestidsstempelet er innebygd direkte i identifikatoren, kan du fastslå nøyaktig når et dokument ble opprettet uten å lagre et separat createdAt-felt.

Hvordan tidsstempelet er innebygd

En ObjectId som 507f1f77bcf86cd799439011 brytes ned som følger:

Bytes Hex-tegn Formål
1–4 507f1f77 Unix-tidsstempel (sekunder siden epoch)
5–9 bcf86cd799 Tilfeldig verdi (unik per maskin/prosess)
10–12 439011 Inkrementerende teller

Konvertering av de første åtte hex-tegnene 507f1f77 til desimal gir 1350844279, som tilsvarer 2012-10-21T21:17:59.000Z.

Verktøybeskrivelse

Dette verktøyet trekker ut det innebygde tidsstempelet fra en hvilken som helst gyldig MongoDB ObjectId og viser det i flere datoformater. Lim inn en ObjectId og se umiddelbart ISO 8601-datoen, UTC-datoen, lokal dato og rått Unix-tidsstempel — ingen databasetilkobling eller kode nødvendig.

Eksempler

Input ObjectId Uttrukket dato (UTC)
507f1f77bcf86cd799439011 2012-10-21T21:17:59.000Z
65a1fc2b0000000000000000 2024-01-13T04:44:27.000Z
000000000000000000000000 1970-01-01T00:00:00.000Z

Funksjoner

  • Umiddelbar uttrekking: Resultater vises mens du skriver — ingen knappeklikk nødvendig
  • Flere formater: Viser ISO 8601, UTC, lokal dato/tid og Unix-tidsstempel
  • Inndatavalidering: Avviser alt som ikke er en gyldig 24-tegns hex-streng
  • Ingen avhengigheter: Kjører helt i nettleseren uten serverkall eller eksterne biblioteker
  • Kopiklar utdata: Hvert utdatafelt kan kopieres individuelt

Bruksområder

  • Feilsøking: Sjekk raskt når et dokument ble satt inn uten å spørre databasen
  • Revisjon: Verifiser opprettelsestidsstempler i eksporterte ObjectId-lister eller loggfiler
  • Etterforskning: Fastslå alderen på poster under datamigrering eller hendelsesundersøkelse

Slik fungerer det

  1. Verktøyet tar de første 8 hex-tegnene i ObjectId-en.
  2. Tolker dem som et 32-bit big-endian heksadesimalt heltall for å hente Unix-tidsstempelet i sekunder.
  3. Multipliserer med 1000 og sender det til et JavaScript Date-objekt.
  4. Formaterer den resulterende datoen til ISO 8601, UTC-streng, lokalitetsbevisst streng og rå sekunder.

Begrensninger

  • Kun opprettelsestidsstempelet trekkes ut. Den tilfeldige delen og tellerdelen av ObjectId-en dekodes ikke fordi de ikke inneholder brukermeningsfull data.
  • ObjectId-er generert med et tilpasset eller null-tidsstempel vil returnere en gyldig, men potensielt misvisende dato.
  • Det lokale datoformatet avhenger av nettleserens lokale innstillinger.

Vanlige spørsmål

Kan jeg trekke ut en dato fra en hvilken som helst MongoDB ObjectId? Ja. Enhver standard MongoDB ObjectId — enten generert av MongoDB-driveren, Mongoose, mongosh, eller verktøy som Faker.js — inneholder et gyldig tidsstempel i sine første fire bytes.

Er dette det samme som createdAt-feltet? Bare hvis ObjectId-en ble generert ved innsettingstidspunktet (standard). Hvis en tilpasset ObjectId ble oppgitt manuelt, kan det innebygde tidsstempelet avvike fra den faktiske opprettelsestiden.

Fungerer dette med ObjectId-er fra eldre MongoDB-versjoner? Ja. Det 4-byte lange tidsstempelprefixet har vært en del av ObjectId-spesifikasjonen siden MongoDB ble lansert. Den eneste endringen over tid har vært i de midterste bytene (maskin-ID vs. tilfeldig verdi), som dette verktøyet ikke dekoder.