Mikä on MongoDB ObjectId?

MongoDB ObjectId on 12-tavuinen (24 heksamerkkiä) yksilöllinen tunniste, jota käytetään oletuksena _id-kenttänä jokaisessa MongoDB-kokoelman dokumentissa. Sen rakenne ei ole satunnainen — se sisältää merkityksellistä tietoa. Ensimmäiset neljä tavua tallentavat Unix-aikaleiman, joka kuvaa sekuntia, jolloin ObjectId luotiin. Loput tavut sisältävät satunnaisen arvon ja kasvavan laskurin, jotka takaavat yksilöllisyyden myös silloin, kun useita dokumentteja lisätään samalla sekunnilla samalla koneella.

Koska luomisaikaleima on suoraan sisäänrakennettuna tunnisteeseen, voit selvittää tarkalleen, milloin dokumentti luotiin ilman erillisen createdAt-kentän tallentamista.

Kuinka aikaleima on upotettu

ObjectId, kuten 507f1f77bcf86cd799439011, jakautuu seuraavasti:

Tavut Heksamerkit Tarkoitus
1–4 507f1f77 Unix-aikaleima (sekuntia epoch-hetkestä)
5–9 bcf86cd799 Satunnainen arvo (yksilöllinen per kone/prosessi)
10–12 439011 Kasvava laskuri

Muuntamalla ensimmäiset kahdeksan heksamerkkiä 507f1f77 desimaaliksi saadaan 1350844279, joka vastaa 2012-10-21T21:17:59.000Z.

Työkalun kuvaus

Tämä työkalu poimii upotetun aikaleiman mistä tahansa kelvollisesta MongoDB ObjectId:stä ja näyttää sen useissa päivämäärämuodoissa. Liitä ObjectId ja näe välittömästi ISO 8601 -päivämäärä, UTC-päivämäärä, paikallinen päivämäärä ja raaka Unix-aikaleima — ilman tietokantayhteyttä tai koodia.

Esimerkit

Syöte ObjectId Poimittu päivämäärä (UTC)
507f1f77bcf86cd799439011 2012-10-21T21:17:59.000Z
65a1fc2b0000000000000000 2024-01-13T04:44:27.000Z
000000000000000000000000 1970-01-01T00:00:00.000Z

Ominaisuudet

  • Välitön poiminta: Tulokset näkyvät kirjoittaessasi — painikkeen napsautusta ei tarvita
  • Useita muotoja: Näyttää ISO 8601-, UTC-, paikallisen päivämäärän/ajan ja Unix-aikaleiman
  • Syötteen validointi: Hylkää kaiken, mikä ei ole kelvollinen 24-merkkinen heksadesimaalinen string
  • Ei riippuvuuksia: Toimii kokonaan selaimessa ilman palvelinkutsuja tai ulkoisia kirjastoja
  • Kopioitavat tulokset: Jokainen tulokenttä voidaan kopioida erikseen

Käyttötapaukset

  • Debuggaus: Tarkista nopeasti, milloin dokumentti lisättiin ilman tietokantakyselyä
  • Auditointi: Varmista luomisaikaleimoja viedyistä ObjectId-listoista tai lokitiedostoista
  • Forensiikka: Selvitä tietueiden ikä tietojen siirron tai tapaustutkimuksen aikana

Kuinka se toimii

  1. Työkalu ottaa ObjectId:n ensimmäiset 8 heksamerkkiä.
  2. Jäsentää ne 32-bittiseksi big-endian-heksadesimaaliluvuksi saadakseen Unix-aikaleiman sekunneissa.
  3. Kertoo luvun 1000:lla ja välittää sen JavaScript Date-objektille.
  4. Muotoilee tuloksena olevan päivämäärän ISO 8601-, UTC string-, aluekohtaiseksi stringiksi ja raakoiksi sekunneiksi.

Rajoitukset

  • Ainoastaan luomisaikaleima poimitaan. ObjectId:n satunnaisia osia ja laskuriosia ei pureta, koska ne eivät sisällä käyttäjälle merkityksellistä tietoa.
  • ObjectId:t, jotka on luotu mukautetulla tai nolla-aikaleimalla, palauttavat kelvollisen mutta mahdollisesti harhaanjohtavan päivämäärän.
  • Paikallinen päivämäärämuoto riippuu selaimesi aluekohtaisista asetuksista.

UKK

Voinko poimia päivämäärän mistä tahansa MongoDB ObjectId:stä? Kyllä. Jokainen tavallinen MongoDB ObjectId — olipa se luotu MongoDB driverilla, Mongoosella, mongosh-työkalulla tai esimerkiksi Faker.js:llä — sisältää kelvollisen aikaleiman ensimmäisissä neljässä tavussaan.

Onko tämä sama kuin createdAt-kenttä? Vain jos ObjectId luotiin lisäyshetkellä (oletustoiminta). Jos mukautettu ObjectId on annettu manuaalisesti, upotettu aikaleima saattaa poiketa todellisesta luomisajasta.

Toimiiko tämä vanhempien MongoDB-versioiden ObjectId:iden kanssa? Kyllä. 4-tavuinen aikaleimaetuliite on ollut osa ObjectId-määrittelyä MongoDB:n ensimmäisestä julkaisusta lähtien. Ainoa muutos ajan myötä on ollut keskimmäisissä tavuissa (koneen tunniste vs. satunnainen arvo), joita tämä työkalu ei pura.