За да разширя малко казаното от Андре:
Тъй като клеймото за време на ObjectID е само към второто, лесно могат да бъдат създадени два (или повече) ObjectID с една и съща стойност за времевата марка (първите 4 байта). Ако те бяха създадени на една и съща машина (ID на машината - следващите 3 байта), от същия процес (PID - следващите 2 байта), тогава единственото нещо, което да ги разграничи, би било полето "inc", последните 3 байта в края.
Актуализация:януари 2020 г.
Този отговор продължава да е популярен, така че си струва да актуализирате малко. Спецификацията ObjectID се е развила, откакто този отговор е написан преди 8 години и 5-те байта след времевия печат вече са просто произволни, което значително ще намали вероятността от всякакви сблъсъци. Последните три байта все още са инкрементални, но се инициализират на произволна стойност за стартиране, което отново прави сблъсъците по-малко вероятни. ObjectID вече съдържа по-малко контекст (не можете лесно да разберете къде е генериран и от какъв процес), но предполагам, че информацията не се използва по никакъв смислен начин и е отхвърлена в полза на по-добро рандомизиране на идентификатора.
Край на актуализацията
Вижте тук за пълната спецификация:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
Това поле "inc" е или постоянно нарастващо поле (тогава разумно можете да очаквате сортирането да бъде в реда на вмъкване/създаване) или произволна стойност (тогава вероятно е уникална, но не е подредена), ако се приеме, че спецификацията е приложена правилно, разбира се . Обърнете внимание, че ObjectID може да се генерира от драйвера или приложението (или наистина ръчно), а не от самия MongoDB, така че освен ако нямате пълен контрол върху начина, по който се генерират, тогава може да се приложи някое или всичко от горните.