Czym jest MongoDB ObjectId?

MongoDB ObjectId to 12-bajtowy (24 znaki szesnastkowe) unikalny identyfikator używany jako domyślne pole _id dla każdego dokumentu w kolekcji MongoDB. Jego struktura nie jest losowa — koduje znaczące informacje. Pierwsze cztery bajty przechowują znacznik czasu Unix reprezentujący sekundę, w której ObjectId został utworzony. Pozostałe bajty zawierają losową wartość oraz inkrementowany licznik, gwarantując unikalność nawet gdy wiele dokumentów jest wstawianych w tej samej sekundzie na tej samej maszynie.

Ponieważ znacznik czasu utworzenia jest bezpośrednio wbudowany w identyfikator, można dokładnie określić, kiedy dokument został utworzony, bez konieczności przechowywania osobnego pola createdAt.

Jak osadzony jest znacznik czasu

ObjectId taki jak 507f1f77bcf86cd799439011 dzieli się następująco:

Bajty Znaki szesnastkowe Przeznaczenie
1–4 507f1f77 Znacznik czasu Unix (sekundy od epoki)
5–9 bcf86cd799 Losowa wartość (unikalna dla maszyny/procesu)
10–12 439011 Inkrementowany licznik

Konwersja pierwszych ośmiu znaków szesnastkowych 507f1f77 na liczbę dziesiętną daje 1350844279, co odpowiada 2012-10-21T21:17:59.000Z.

Opis narzędzia

To narzędzie wyodrębnia osadzony znacznik czasu z dowolnego prawidłowego MongoDB ObjectId i wyświetla go w wielu formatach daty. Wklej ObjectId i natychmiast zobacz datę w formacie ISO 8601, datę UTC, datę lokalną oraz surowy znacznik czasu Unix — bez połączenia z bazą danych ani pisania kodu.

Przykłady

Wejściowy ObjectId Wyodrębniona data (UTC)
507f1f77bcf86cd799439011 2012-10-21T21:17:59.000Z
65a1fc2b0000000000000000 2024-01-13T04:44:27.000Z
000000000000000000000000 1970-01-01T00:00:00.000Z

Funkcje

  • Natychmiastowe wyodrębnianie: Wyniki pojawiają się podczas wpisywania — bez klikania przycisków
  • Wiele formatów: Wyświetla ISO 8601, UTC, lokalną datę/godzinę oraz znacznik czasu Unix
  • Walidacja danych wejściowych: Odrzuca wszystko, co nie jest prawidłowym 24-znakowym ciągiem szesnastkowym
  • Brak zależności: Działa w całości w przeglądarce bez wywołań serwera ani zewnętrznych bibliotek
  • Gotowe do skopiowania wyjście: Każde pole wyjściowe można skopiować osobno

Przypadki użycia

  • Debugowanie: Szybkie sprawdzenie, kiedy dokument został wstawiony, bez odpytywania bazy danych
  • Audyt: Weryfikacja znaczników czasu utworzenia w wyeksportowanych listach ObjectId lub plikach dziennika
  • Analiza forensyczna: Określanie wieku rekordów podczas migracji danych lub analizy incydentów

Jak to działa

  1. Narzędzie pobiera pierwsze 8 znaków szesnastkowych ObjectId.
  2. Interpretuje je jako 32-bitową liczbę całkowitą szesnastkową big-endian, aby uzyskać znacznik czasu Unix w sekundach.
  3. Mnoży przez 1000 i przekazuje do obiektu JavaScript Date.
  4. Formatuje wynikową datę do postaci ISO 8601, ciągu UTC, ciągu uwzględniającego ustawienia regionalne oraz surowych sekund.

Ograniczenia

  • Wyodrębniany jest wyłącznie znacznik czasu utworzenia. Losowa część i część licznika ObjectId nie są dekodowane, ponieważ nie zawierają danych istotnych dla użytkownika.
  • ObjectId wygenerowane z niestandardowym lub zerowym znacznikiem czasu zwrócą prawidłową, lecz potencjalnie mylącą datę.
  • Format daty lokalnej zależy od ustawień regionalnych przeglądarki.

FAQ

Czy mogę wyodrębnić datę z dowolnego MongoDB ObjectId? Tak. Każdy standardowy MongoDB ObjectId — niezależnie od tego, czy został wygenerowany przez driver MongoDB, Mongoose, mongosh, czy narzędzia takie jak Faker.js — zawiera prawidłowy znacznik czasu w pierwszych czterech bajtach.

Czy to jest to samo co pole createdAt? Tylko jeśli ObjectId został wygenerowany w momencie wstawiania (domyślne zachowanie). Jeśli niestandardowy ObjectId został podany ręcznie, osadzony znacznik czasu może różnić się od rzeczywistego czasu utworzenia.

Czy to działa z ObjectId ze starszych wersji MongoDB? Tak. 4-bajtowy prefiks znacznika czasu jest częścią specyfikacji ObjectId od pierwszego wydania MongoDB. Jedyną zmianą na przestrzeni czasu były środkowe bajty (identyfikator maszyny vs. losowa wartość), które to narzędzie nie dekoduje.