Varför är standard _id
en hex-sträng med 24 tecken?
Den unika standardidentifieraren som genereras som primärnyckel (_id
) för ett MongoDB-dokument är ett ObjectId
. Detta är ett binärt värde på 12 bytes som ofta representeras som en hexadecimal sträng på 24 tecken, och en av standardfälttyperna som stöds av MongoDB BSON-specifikation
.
De 12 byten av ett ObjectId är konstruerade med:
- ett värde på 4 byte som representerar sekunderna sedan Unix-epoken
- en 3-byte maskinidentifierare
- ett process-id på 2 byte
- en 3 byte-räknare (som börjar med ett slumpmässigt värde)
Vad är betydelsen av ett ObjectId?
ObjectIds (eller liknande identifierare genererade enligt en GUID formula) tillåter unika identifierare att genereras oberoende i ett distribuerat system.
Möjligheten att självständigt generera ett unikt ID blir mycket viktigt när du skalar upp till flera applikationsservrar (eller kanske flera databasnoder i en delad kluster ). Du vill inte ha en central koordinationsflaskhals som en sekvensräknare (t.ex. som du kan ha för en auto-inkrementerande primärnyckel), och du vill infoga nya dokument utan risk för att en ny identifierare visar sig vara en duplicera.
Ett ObjectId genereras vanligtvis av din MongoDB klientdrivrutin
, men kan också genereras på MongoDB-servern om din klientdrivrutin eller applikationskod eller inte redan har lagt till ett _id
fältet.
Måste jag använda standardobjekt-ID?
Nej. Om du har en mer lämplig unik identifierare att använda kan du alltid ange ditt eget värde för _id
. Detta kan antingen vara ett enskilt värde eller ett sammansatt värde som använder flera fält.
De huvudsakliga begränsningarna för _id
värden är att de måste vara unika för en samling och du kan inte uppdatera eller ta bort _id
för ett befintligt dokument.