Passer au contenu

Générateur d'ObjectID MongoDB - Créer des Identifiants BSON Uniques

Générez instantanément des ObjectIDs MongoDB uniques avec notre outil en ligne gratuit. Créez des identifiants BSON valides de 12 octets pour les tests, le développement et les opérations de base de données. Aucune installation requise.

Générateur d'ObjectID MongoDB

Calculateur de chargement...
📚

Documentation

Qu’est-ce qu’un ObjectID MongoDB ?

Un ObjectID MongoDB est une valeur de 12 octets que MongoDB attribue par défaut au champ _id de chaque document. Il s’écrit avec 24 caractères hexadécimaux en minuscules, par exemple 507f1f77bcf86cd799439011. Cet outil génère entre 1 et 100 ObjectID valides à la fois, directement dans le navigateur, sans connexion à une base de données.

Structure d’un ObjectID MongoDB

Un ObjectID est composé de trois parties, placées les unes après les autres :

  • Horodatage (4 octets). Le nombre de secondes écoulées depuis le 1 janvier 1970 (l’époque Unix), stocké sous la forme d’un nombre non signé en gros-boutiste. Il indique le moment où l’ObjectID a été créé.
  • Valeur aléatoire (5 octets). Un nombre choisi au hasard une seule fois, au démarrage d’un programme. Tous les ObjectID que ce programme crée ensuite réutilisent la même valeur aléatoire, de sorte que des ordinateurs différents n’ont pas besoin de se coordonner.
  • Compteur (3 octets). Un nombre qui part d’un point aléatoire entre 0 et 16 777 215 et augmente de 1 à chaque nouvel ObjectID. S’il dépasse 16 777 215, il repasse à 0.

Mises bout à bout, les parties se présentent ainsi :

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Les anciens pilotes MongoDB construisaient la partie centrale à partir d’un identifiant de machine et d’un identifiant de processus plutôt que d’un nombre aléatoire. Les pilotes actuels, y compris la logique de cet outil, utilisent à la place une seule valeur aléatoire de 5 octets par processus.

Format et formule d’un ObjectID MongoDB

Aucune formule arithmétique ne se cache derrière un ObjectID, contrairement à un pourcentage ou à un calcul d’intérêts. Il est assemblé en convertissant trois nombres en texte hexadécimal, puis en les joignant bout à bout :

  1. Prenez l’heure actuelle en secondes depuis l’époque Unix. Écrivez-la sous la forme d’un nombre hexadécimal à 8 chiffres.
  2. Prenez la valeur aléatoire fixe du processus, un nombre compris entre 0 et 2^40 − 1. Écrivez-le sous la forme d’un nombre hexadécimal à 10 chiffres.
  3. Prenez la valeur actuelle du compteur, de 0 à 16 777 215. Écrivez-la sous la forme d’un nombre hexadécimal à 6 chiffres, puis augmentez le compteur de 1 pour l’identifiant suivant.
  4. Joignez les trois chaînes hexadécimales, dans cet ordre, pour former une seule chaîne de 24 caractères.

Exemple

Supposons qu’un programme démarre à l’heure Unix 1 700 000 000 secondes, soit le 14 novembre 2023, 22:13:20 UTC. Il choisit la valeur aléatoire 3f2a91c8d4 et lance son compteur à 12 345.

  • Horodatage en hexadécimal : 6553f100
  • Valeur aléatoire en hexadécimal : 3f2a91c8d4
  • Compteur en hexadécimal : 003039

En les joignant, on obtient le premier ObjectID :

6553f1003f2a91c8d4003039

Si le programme génère un second ObjectID dans la même seconde, l’horodatage et la valeur aléatoire restent identiques, mais le compteur passe à 12 346 (00303a) :

6553f1003f2a91c8d400303a

La lecture d’un ObjectID fonctionne aussi à l’inverse. Pour 507f1f77bcf86cd799439011, les 8 premiers caractères, 507f1f77, se décodent en 1 350 508 407 secondes depuis l’époque Unix, soit le 17 octobre 2012, 21:13:27 UTC.

Utilisations courantes des ObjectID MongoDB

  • Clés primaires. MongoDB place automatiquement un ObjectID dans le champ _id d’un document, sauf si une autre valeur est fournie.
  • Recherche de la date de création. Comme l’horodatage est intégré, un programme peut lire la date de création approximative d’un document sans champ de date distinct.
  • Tri par ordre d’insertion. Trier des documents selon _id les classe à peu près par date de création, car l’horodatage vient en premier dans la valeur.
  • Données de test et fictives. Les développeurs utilisent des ObjectID générés pour construire des documents d’exemple ou des tests automatisés sans exécuter de base de données.

ObjectID MongoDB et UUID

Un UUID (Universally Unique Identifier, identifiant universellement unique) est une valeur de 16 octets, soit quatre octets de plus qu’un ObjectID. Un UUID de version 4 est construit à partir de nombres aléatoires ; il ne révèle donc pas l’heure de création et ne se trie pas par ordre de création. La même norme définit aussi un UUID de version 7, qui commence par un horodatage Unix en millisecondes et se trie par date. Un ObjectID est plus court et à peu près ordonné dans le temps. La RFC 9562 décrit les UUID comme destinés à être uniques dans l’espace et dans le temps, tout en demandant aux implémenteurs de peser les conséquences d’une collision ; pour les deux formats, une collision est très improbable en pratique.

Questions fréquentes

À quoi sert un ObjectID MongoDB ? C’est la valeur par défaut que MongoDB place dans le champ _id d’un document, de sorte que chaque document obtient une clé unique sans configuration supplémentaire.

Les ObjectID MongoDB sont-ils garantis uniques ? Pas au sens formel et mathématique, mais les collisions sont extrêmement improbables. Deux ObjectID devraient avoir la même valeur aléatoire et la même position de compteur dans la même seconde, ce qui ne se produit normalement qu’au sein d’un seul processus.

La date de création peut-elle être lue dans un ObjectID ? Oui. Les 8 premiers caractères hexadécimaux, soit 4 octets, contiennent le nombre de secondes écoulées depuis l’époque Unix. Convertir ce nombre en date donne la date de création approximative.

Combien d’ObjectID ce générateur peut-il produire à la fois ? Entre 1 et 100 par lot. Tous les identifiants d’un lot partagent la même valeur aléatoire commune au processus, et chacun a un compteur supérieur d’une unité au précédent.

Les ObjectID MongoDB peuvent-ils être utilisés en dehors de MongoDB ? Oui. Comme il s’agit simplement de valeurs de 12 octets encodées en texte hexadécimal, ils servent d’identifiants uniques dans d’autres systèmes aussi, même si le schéma d’identifiants propre à une base de données peut mieux répondre à ses besoins.

Ce générateur est-il connecté à une vraie base de données MongoDB ? Non. Il s’exécute entièrement dans le navigateur et ne lit ni n’écrit aucune base de données.

Références

  1. MongoDB. BSON Types: ObjectId. BSON Types — les ObjectId font 12 octets (horodatage de 4 octets, valeur aléatoire de 5 octets, compteur de 3 octets), remplissent _id par défaut et se trient à peu près par date de création.
  2. MongoDB. ObjectID specification. BSON ObjectID specification — horodatage non signé en gros-boutiste, valeur aléatoire générée une fois par processus, compteur démarrant à une valeur aléatoire et remis à 0 après 16 777 215, ainsi que les anciens champs d’identifiant de machine et d’identifiant de processus.
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — un UUID fait 16 octets (128 bits) ; la version 4 est aléatoire et la version 7 est ordonnée dans le temps.