Clé primaire Mongodb : exemple pour définir le champ _id avec ObjectId()
⚡ Résumé intelligent
MongoDB La clé primaire est le champ _id qui identifie de manière unique chaque document d'une collection. Par défaut, il contient un ObjectId généré automatiquement, mais vous pouvez également lui attribuer une valeur personnalisée lors de l'insertion d'un document.
Qu'est-ce que la clé primaire dans MongoDB?
In MongoDB, champ _id comme clé primaire de la collection afin que chaque document puisse être identifié de manière unique dans la collection. Le champ _id contient une valeur ObjectID unique.
Par défaut lors de l'insertion de documents dans la collection, si vous n'ajoutez pas de nom de champ avec le _id dans le nom du champ, alors MongoDB ajoutera automatiquement un champ ID d'objet comme indiqué ci-dessous
Lorsque vous interrogez les documents d'une collection, vous pouvez voir l'ObjectId de chaque document de la collection.
Si vous voulez vous assurer que MongoDB ne crée pas le champ _id lors de la création de la collection et si vous souhaitez spécifier votre propre identifiant comme _id de la collection, vous devez le définir explicitement lors de la création de la collection.
Lors de la création explicite d'un champ id, il doit être créé avec _id dans son nom.
Regardons un exemple sur la façon dont nous pouvons y parvenir.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Explication:
- Nous supposons que nous créons le premier document de la collection et donc dans l'instruction ci-dessus lors de la création de la collection, nous définissons explicitement le champ _id et lui définissons une valeur.
Si la commande est exécutée avec succès et que vous utilisez maintenant la commande find pour afficher les documents de la collection, la sortie suivante sera affichée
Sortie :
Le résultat montre clairement que le champ _id que nous avons défini lors de la création de la collection est désormais utilisé comme clé primaire pour la collection.
Qu'est-ce que ObjectId dans MongoDB?
Un ObjectId est le type de valeur par défaut qui MongoDB attribue une valeur à la clé primaire _id. Il s'agit d'un identifiant de 12 octets conçu pour être unique au niveau mondial sur l'ensemble des serveurs et des collections, de sorte que deux documents ne reçoivent quasiment jamais la même valeur. Le pilote client pouvant générer un ObjectId sans interroger le serveur, MongoDB permet d'insérer rapidement des documents et de s'adapter à de nombreuses machines sans compteur central.
Chaque ObjectId est stocké sous forme binaire compacte, mais affiché comme une chaîne hexadécimale de 24 caractères, par exemple ObjectId("507f1f77bcf86cd799439011"). Les premiers octets sont basés sur l'heure actuelle, ce qui signifie que les valeurs augmentent progressivement à mesure que des documents sont créés. Ainsi, les ObjectId sont non seulement uniques, mais aussi approximativement triables par ordre d'insertion, une propriété utile pour afficher les enregistrements les plus récents ou les plus anciens en premier.
Structure d'un MongoDB ID de l'objet
A MongoDB L'ObjectId fait exactement 12 octets, et chaque partie a une signification précise. Comprendre sa structure permet de comprendre pourquoi les ObjectIds sont uniques et ordonnés chronologiquement :
- Horodatage sur 4 octets : Le nombre de secondes écoulées depuis l'époque Unix, correspondant à la date de création de l'ObjectId. Cela permet de trier les identifiants par date.
- Valeur aléatoire de 5 octets : Une valeur générée une seule fois par processus, combinant l'identité de la machine et celle du processus, de sorte que différents clients produisent des identifiants différents.
- Compteur incrémental de 3 octets : Un compteur qui démarre à partir d'une valeur aléatoire et s'incrémente à chaque nouvel ObjectId dans la même seconde, évitant ainsi les collisions lors d'insertions rapides.
Ensemble, ces trois éléments garantissent l'unicité de chaque ObjectId, même lorsque de nombreux documents sont insérés simultanément sur différents serveurs. Vous pouvez consulter à tout moment la date et l'heure de création intégrées en appelant la méthode getTimestamp() sur un ObjectId.
Avantages de l'utilisation d'ObjectId comme clé primaire
L'utilisation de l'ObjectId par défaut comme clé primaire _id offre plusieurs avantages pratiques, ce qui explique pourquoi la plupart des MongoDB Les collections en dépendent :
- Génération automatique : Vous n'avez pas besoin de créer ni de gérer vous-même les valeurs clés, ce qui réduit le risque de clés dupliquées.
- Unicité mondiale : Les ObjectIds restent uniques d'un serveur à l'autre, ils fonctionnent donc bien dans les déploiements distribués et partitionnés.
- Horodatage intégré : L'heure de création intégrée vous permet de trier ou de filtrer les documents par ancienneté sans champ de date supplémentaire.
- Haute performance: La génération côté client évite un aller-retour au serveur, gardeping S'insère rapidement.
Bien qu'ObjectId convienne à la plupart des applications, vous pouvez opter pour un _id personnalisé, tel qu'une adresse e-mail ou un code produit, lorsqu'une clé métier naturelle simplifie les requêtes. Le choix le plus approprié dépend de la manière dont vous prévoyez de rechercher et de relier vos données.



