Aby nieco rozwinąć to, co powiedział Andre:
Ponieważ znacznik czasu ObjectID jest tylko do drugiego, można łatwo utworzyć dwa (lub więcej) identyfikatory ObjectID z tą samą wartością znacznika czasu (pierwsze 4 bajty). Gdyby zostały utworzone na tej samej maszynie (machine ID - kolejne 3 bajty), przez ten sam proces (PID - kolejne 2 bajty), to jedyne, co je odróżnia, to pole "inc", ostatnie 3 bajty na końcu.
Aktualizacja:styczeń 2020 r.
Ta odpowiedź jest nadal popularna, więc warto ją trochę zaktualizować. Specyfikacja ObjectID ewoluowała od czasu napisania tej odpowiedzi 8 lat temu, a 5 bajtów po znaczniku czasu jest teraz po prostu losowych, co znacznie zmniejszy prawdopodobieństwo jakichkolwiek kolizji. Ostatnie trzy bajty są nadal przyrostowe, ale są inicjowane losową wartością, aby rozpocząć, ponownie zmniejszając prawdopodobieństwo kolizji. ObjectID zawiera teraz mniej kontekstu (nie można łatwo stwierdzić, gdzie został wygenerowany i przez jaki proces), ale przypuszczam, że informacje nie były używane w żaden sensowny sposób i zostały przestarzałe na rzecz lepszej randomizacji identyfikatora.
Zakończ aktualizację
Zobacz pełną specyfikację:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
To pole „inc” jest albo polem stale rosnącym (wtedy można rozsądnie oczekiwać, że sortowanie będzie w kolejności wstawiania/utworzenia) albo wartością losową (wtedy prawdopodobnie unikatową, ale nie uporządkowaną), zakładając oczywiście, że specyfikacja jest zaimplementowana poprawnie . Zwróć uwagę, że identyfikatory ObjectID mogą być generowane przez sterownik lub aplikację (lub rzeczywiście ręcznie), a nie przez samą MongoDB, więc jeśli nie masz pełnej kontroli nad sposobem ich generowania, może mieć zastosowanie dowolne lub wszystkie z powyższych.