Защо по подразбиране е _id
шестнадесетичен низ от 24 знака?
Уникалният идентификатор по подразбиране, генериран като първичен ключ (_id
) за MongoDB документ е ObjectId
. Това е 12-байтова двоична стойност, която често се представя като шестнадесетичен низ от 24 знака и един от стандартните типове полета, поддържани от MongoDB BSON спецификация
.
12-те байта на ObjectId са конструирани с помощта на:
- стойност от 4 байта, представляваща секундите от епохата на Unix
- 3-байтов машинен идентификатор
- 2-байтов идентификатор на процеса
- 3-байтов брояч (започващ с произволна стойност)
Каква е важността на ObjectId?
ObjectIds (или подобни идентификатори, генерирани според GUID формула) позволяват уникалните идентификатори да бъдат независимо генерирани в разпределена система.
Способността за независимо генериране на уникален идентификатор става много важна, когато мащабирате до множество сървъри за приложения (или може би множество възли на база данни в разделен клъстер ). Не искате да имате централно затруднение на координацията като брояч на последователности (напр. както може да имате за автоматично увеличаващ се първичен ключ) и ще искате да вмъкнете нови документи без риск нов идентификатор да се окаже дубликат.
ObjectId обикновено се генерира от вашия MongoDB клиентски драйвер
, но може да се генерира и на MongoDB сървъра, ако вашият клиентски драйвер или код на приложение или все още не са добавили _id
поле.
Трябва ли да използвам ObjectId по подразбиране?
Не. Ако имате по-подходящ уникален идентификатор за използване, винаги можете да предоставите своя собствена стойност за _id
. Това може да бъде единична стойност или съставна стойност, използваща множество полета.
Основните ограничения на _id
стойностите са, че те трябва да бъдат уникални за колекция и не можете да актуализирате или премахнете _id
за съществуващ документ.