MongoDB ObjectID Generator - Maak Unieke BSON-identificatoren
Genereer direct unieke MongoDB ObjectIDs met onze gratis online tool. Maak geldige 12-byte BSON-identificatoren voor testen, ontwikkeling & database-bewerkingen. Geen installatie vereist.
MongoDB ObjectID Generator
Documentatie
Wat is een MongoDB ObjectID?
Een MongoDB ObjectID is een waarde van 12 byte die MongoDB standaard toewijst aan het veld _id van elk document. De waarde wordt geschreven als 24 kleine hexadecimale tekens, bijvoorbeeld 507f1f77bcf86cd799439011. Deze tool genereert rechtstreeks in de browser per keer tussen 1 en 100 geldige ObjectID's, zonder dat een databaseverbinding nodig is.
Structuur van een MongoDB ObjectID
Een ObjectID bestaat uit drie delen die achter elkaar worden geplaatst:
- Tijdstempel (4 bytes). Het aantal seconden sinds 1 januari 1970 (het Unix-epoch), opgeslagen als een ongetekend getal in big-endian-volgorde. Het legt vast wanneer de ObjectID is gemaakt. Vier bytes bevatten waarden van 0 tot 4.294.967.295, dus het veld springt na 7 februari 2106, 06:28:15 UTC terug naar 0.
- Willekeurige waarde (5 bytes). Een waarde die één keer willekeurig wordt gekozen wanneer een programma start. Elke ObjectID die het programma daarna maakt, gebruikt dezelfde willekeurige waarde opnieuw, zodat verschillende computers geen afstemming nodig hebben.
- Teller (3 bytes). Een waarde die op een willekeurig punt tussen 0 en 16.777.215 begint en voor elke nieuwe ObjectID met 1 wordt verhoogd. Als de teller boven 16.777.215 komt, springt hij terug naar 0.
Achter elkaar geplaatst zien de onderdelen er als volgt uit:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Oudere MongoDB-stuurprogramma's stelden het middelste gedeelte samen uit een machine-ID en een proces-ID, in plaats van een willekeurige waarde. Huidige stuurprogramma's, waaronder de logica achter deze tool, gebruiken per proces één willekeurige waarde van 5 bytes.
Indeling en formule van een MongoDB ObjectID
Achter een ObjectID zit geen rekenkundige formule, in tegenstelling tot een percentage of een renteberekening. Het wordt samengesteld door drie getallen om te zetten naar hexadecimale tekst en ze achter elkaar te plaatsen:
- Neem de huidige tijd in seconden sinds het Unix-epoch, teruggebracht tot het bereik 0 tot 4.294.967.295 zodat de waarde in vier bytes past. Schrijf deze als een hexadecimaal getal van 8 cijfers.
- Neem de vaste willekeurige waarde van het proces, een getal van 0 tot 2^40 − 1. Schrijf deze als een hexadecimaal getal van 10 cijfers.
- Neem de huidige waarde van de teller, van 0 tot 16.777.215. Schrijf deze als een hexadecimaal getal van 6 cijfers en verhoog de teller vervolgens met 1 voor de volgende ID.
- Voeg de drie hexadecimale tekenreeksen in die volgorde samen tot één tekenreeks van 24 tekens.
Uitgewerkt voorbeeld
Stel dat een programma start op Unix-tijd 1.700.000.000 seconden, oftewel 14 november 2023, 22:13:20 UTC. Het kiest de willekeurige waarde 3f2a91c8d4 en start de teller op 12.345.
- Tijdstempel in hexadecimale notatie:
6553f100 - Willekeurige waarde in hexadecimale notatie:
3f2a91c8d4 - Teller in hexadecimale notatie:
003039
Door deze waarden samen te voegen ontstaat de eerste ObjectID:
6553f1003f2a91c8d4003039
Als het programma in dezelfde seconde een tweede ObjectID genereert, blijven het tijdstempel en de willekeurige waarde gelijk, maar wordt de teller verhoogd naar 12.346 (00303a):
6553f1003f2a91c8d400303a
Het lezen van een ObjectID werkt ook omgekeerd. Gegeven 507f1f77bcf86cd799439011 decoderen de eerste 8 tekens, 507f1f77, naar 1.350.508.407 seconden sinds het epoch, oftewel 17 oktober 2012, 21:13:27 UTC.
Veelvoorkomende toepassingen van MongoDB ObjectID's
- Primaire sleutels. MongoDB plaatst automatisch een ObjectID in het veld
_idvan een document, tenzij een andere waarde wordt opgegeven. - Opzoeken op aanmaaktijd. Omdat het tijdstempel is ingebed, kan een programma de geschatte aanmaaktijd van een document uitlezen zonder een afzonderlijk datumveld.
- Sorteren op invoegvolgorde. Door documenten op
_idte sorteren, worden ze ongeveer op aanmaaktijd gesorteerd, omdat het tijdstempel vooraan in de waarde staat. - Test- en voorbeeldgegevens. Ontwikkelaars gebruiken gegenereerde ObjectID's om voorbeelddocumenten of geautomatiseerde tests te maken zonder een database te starten.
MongoDB ObjectID versus UUID
Een UUID (Universally Unique Identifier) is een waarde van 16 bytes, vier bytes groter dan een ObjectID. Een standaard-UUID is doorgaans overal willekeurig en onthult daardoor geen aanmaaktijd en wordt niet op aanmaakvolgorde gesorteerd. Een ObjectID is korter en ongeveer tijdgeordend. Dat is een van de redenen waarom MongoDB het standaard gebruikt, hoewel het niet dezelfde formele uniciteitsgarantie biedt als een correct gegenereerde UUID.
Veelgestelde vragen
Waarvoor wordt een MongoDB ObjectID gebruikt?
Het is de standaardwaarde die MongoDB in het veld _id van een document plaatst, zodat elk document zonder extra configuratie een unieke sleutel krijgt.
Zijn MongoDB ObjectID's gegarandeerd uniek? Niet in formele, wiskundige zin, maar botsingen zijn uiterst onwaarschijnlijk. Twee ObjectID's zouden in dezelfde seconde dezelfde willekeurige waarde en dezelfde tellerpositie moeten hebben. Dat gebeurt normaal gesproken alleen binnen één proces.
Kan de aanmaakdatum uit een ObjectID worden gelezen? Ja. De eerste 8 hexadecimale tekens, oftewel 4 bytes, bevatten het aantal seconden sinds het Unix-epoch. Als dat getal naar een datum wordt omgezet, levert dat de geschatte aanmaaktijd op.
Hoeveel ObjectID's kan deze generator tegelijk maken? Tussen 1 en 100 per batch. Elke ID in een batch gebruikt dezelfde procesbrede willekeurige waarde en heeft een teller die één hoger staat dan die van de vorige ID.
Kunnen MongoDB ObjectID's buiten MongoDB worden gebruikt? Ja. Omdat het eenvoudigweg waarden van 12 bytes zijn die als hexadecimale tekst zijn gecodeerd, werken ze ook als unieke ID's in andere systemen, hoewel het eigen ID-schema van een database mogelijk beter bij de behoeften past.
Is deze generator verbonden met een echte MongoDB-database? Nee. De generator draait volledig in de browser en leest niet uit en schrijft niet naar een database.
Referenties
- "ObjectId." MongoDB-handleiding, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON-specificaties, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON-specificatie, https://bsonspec.org/spec.html.