MongoDB ObjectID-generator - Skapa unika BSON-identifierare
Generera unika MongoDB ObjectID:n direkt med vårt kostnadsfria onlineverktyg. Skapa giltiga 12-byte BSON-identifierare för testning, utveckling och databasoperationer. Ingen installation krävs.
MongoDB ObjectID-generator
Dokumentation
Vad är ett MongoDB ObjectID?
Ett MongoDB ObjectID är ett värde på 12 byte som MongoDB som standard tilldelar fältet _id i varje dokument. Det skrivs som 24 hexadecimala tecken med gemener, till exempel 507f1f77bcf86cd799439011. Det här verktyget genererar mellan 1 och 100 giltiga ObjectID:n åt gången, direkt i webbläsaren och utan att någon databasanslutning behövs.
MongoDB ObjectID:s struktur
Ett ObjectID består av tre delar som placeras efter varandra:
- Tidsstämpel (4 byte). Antalet sekunder sedan 1 januari 1970 (Unix-epoken), lagrat som ett osignerat tal i big-endian-format. Det anger när ObjectID:t skapades. Fyra byte rymmer värden från 0 till 4 294 967 295, så fältet börjar om från 0 efter 7 februari 2106, 06:28:15 UTC.
- Slumpvärde (5 byte). Ett slumpmässigt valt tal som bestäms en gång när ett program startar. Alla ObjectID:n som programmet därefter skapar återanvänder samma slumpvärde, så olika datorer behöver inte samordna sig.
- Räknare (3 byte). Ett tal som börjar på en slumpmässig punkt mellan 0 och 16 777 215 och ökar med 1 för varje nytt ObjectID. Om det passerar 16 777 215 börjar det om från 0.
När delarna läggs efter varandra ser de ut så här:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Äldre MongoDB-drivrutiner konstruerade mittdelen med hjälp av en maskinidentifierare och ett process-ID i stället för ett slumpvärde. Aktuella drivrutiner, inklusive logiken bakom det här verktyget, använder i stället ett slumpmässigt värde på 5 byte per process.
MongoDB ObjectID:ets format och formel
Det finns ingen aritmetisk formel bakom ett ObjectID, till skillnad från en procentsats eller en ränteberäkning. Det skapas genom att tre tal omvandlas till hexadecimal text och sätts ihop efter varandra:
- Ta den aktuella tiden i sekunder sedan Unix-epoken och begränsa den till intervallet 0 till 4 294 967 295 så att den ryms i fyra byte. Skriv den som ett hexadecimalt tal med 8 siffror.
- Ta processens fasta slumpvärde, ett tal från 0 till 2^40 − 1. Skriv det som ett hexadecimalt tal med 10 siffror.
- Ta räknarens aktuella värde, från 0 till 16 777 215. Skriv det som ett hexadecimalt tal med 6 siffror och öka sedan räknaren med 1 för nästa ID.
- Sätt ihop de tre hexadecimala strängarna i den ordningen till en enda sträng med 24 tecken.
Räkneexempel
Anta att ett program startar vid Unix-tiden 1 700 000 000 sekunder, vilket är 14 november 2023, 22:13:20 UTC. Det väljer slumpvärdet 3f2a91c8d4 och startar räknaren på 12 345.
- Tidsstämpel i hexadecimal form:
6553f100 - Slumpvärde i hexadecimal form:
3f2a91c8d4 - Räknare i hexadecimal form:
003039
När dessa sätts ihop blir det första ObjectID:t:
6553f1003f2a91c8d4003039
Om programmet genererar ett andra ObjectID under samma sekund förblir tidsstämpeln och slumpvärdet oförändrade, men räknaren ökar till 12 346 (00303a):
6553f1003f2a91c8d400303a
Ett ObjectID kan också läsas av i omvänd riktning. Givet 507f1f77bcf86cd799439011 avkodar de första 8 tecknen, 507f1f77, till 1 350 508 407 sekunder sedan epoken, vilket är 17 oktober 2012, 21:13:27 UTC.
Vanliga användningsområden för MongoDB ObjectID:n
- Primärnycklar. MongoDB placerar automatiskt ett ObjectID i dokumentets fält
_id, om inget annat värde anges. - Sökning efter skapandetid. Eftersom tidsstämpeln är inbäddad kan ett program läsa av ett dokuments ungefärliga skapandetid utan ett separat datumfält.
- Sortering efter insättningsordning. Om dokument sorteras efter
_idsorteras de ungefär efter skapandetid, eftersom tidsstämpeln kommer först i värdet. - Test- och simuleringsdata. Utvecklare använder genererade ObjectID:n för att skapa exempeldokument eller automatiserade tester utan att köra en databas.
MongoDB ObjectID jämfört med UUID
En UUID (Universally Unique Identifier) är ett värde på 16 byte, alltså fyra byte större än ett ObjectID. En standard-UUID är vanligtvis slumpmässig i hela värdet, så den avslöjar inte skapandetiden och sorteras inte efter skapandeordning. Ett ObjectID är kortare och ungefär tidsordnat, vilket är en anledning till att MongoDB använder det som standard, även om det inte har samma formella unikhetsgaranti som en korrekt genererad UUID.
Vanliga frågor och svar
Vad används ett MongoDB ObjectID till?
Det är standardvärdet som MongoDB placerar i ett dokuments fält _id, så att varje dokument får en unik nyckel utan extra konfiguration.
Garanteras MongoDB ObjectID:n vara unika? Inte i en formell, matematisk mening, men kollisioner är ytterst osannolika. Två ObjectID:n skulle behöva ha samma slumpvärde och samma räknarposition under samma sekund, vilket normalt bara inträffar inom en enda process.
Kan skapandedatumet läsas ut från ett ObjectID? Ja. De första 8 hexadecimala tecknen, 4 byte, innehåller antalet sekunder sedan Unix-epoken. När talet omvandlas till ett datum får man den ungefärliga skapandetiden.
Hur många ObjectID:n kan den här generatorn skapa åt gången? Mellan 1 och 100 per batch. Alla ID:n i en batch delar samma processövergripande slumpvärde, och varje ID har en räknare som är ett steg högre än den föregåendes.
Kan MongoDB ObjectID:n användas utanför MongoDB? Ja. Eftersom de bara är värden på 12 byte som kodats som hexadecimal text fungerar de även som unika ID:n i andra system, även om en databas egen ID-struktur kan passa dess behov bättre.
Är den här generatorn ansluten till en riktig MongoDB-databas? Nej. Den körs helt i webbläsaren och läser inte från eller skriver till någon databas.
Referenser
- "ObjectId." MongoDB Manual, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON Specifications, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON Specification, https://bsonspec.org/spec.html.