Maison >base de données >MongoDB >Comment puis-je travailler avec des documents et des tableaux intégrés à MongoDB?
Cet article explore les documents et les tableaux intégrés de MongoDB. Il discute de la création, de l'interrogation et de la mise à jour des champs imbriqués, de la comparaison des implications de performance de l'intégration par rapport à la référence et de l'offre de meilleures pratiques de conception de schéma pour un efficacité optimale
La flexibilité de MongoDB brille dans son support pour les documents et les tableaux intégrés. Les documents intégrés sont des documents imbriqués dans un autre document, tandis que les tableaux contiennent une liste de documents ou de valeurs. Explorons comment les utiliser.
La création et l'utilisation de documents intégrés: les documents embarqués sont idéaux lorsque les données associées sont petites et toujours accessibles ensemble. Considérez une collection users
où chaque utilisateur a une adresse. Au lieu d'avoir une collection addresses
distinctes et de la référence, vous pouvez intégrer l'adresse directement dans le document utilisateur:
<code class="json">{ "_id": ObjectId("..."), "name": "John Doe", "email": "john.doe@example.com", "address": { "street": "123 Main St", "city": "Anytown", "zip": "12345" } }</code>
Vous pouvez accéder au document intégré en utilisant la notation de points dans vos requêtes: db.users.find({ "address.city": "Anytown" })
. Vous pouvez également intégrer des tableaux de documents dans des documents. Par exemple, un utilisateur peut avoir plusieurs numéros de téléphone:
<code class="json">{ "_id": ObjectId("..."), "name": "Jane Doe", "email": "jane.doe@example.com", "phones": [ { "type": "home", "number": "555-1212" }, { "type": "mobile", "number": "555-3434" } ] }</code>
Création et utilisation des tableaux: les tableaux sont simples à utiliser. Vous pouvez ajouter, supprimer et mettre à jour les éléments directement à l'aide des opérateurs de mise à jour comme $push
, $pull
et $set
. Par exemple, l'ajout d'un nouveau numéro de téléphone:
<code class="javascript">db.users.updateOne( { "_id": ObjectId("...") }, { $push: { "phones": { "type": "work", "number": "555-5656" } } } )</code>
Le choix entre l'intégration et la référence a un impact significatif sur les performances. L'intégration est généralement plus rapide pour les lectures, surtout lorsque vous avez fréquemment besoin des données connexes. Il réduit le nombre de requêtes de base de données nécessaires car toutes les informations sont dans un seul document. Cependant, l'intégration peut entraîner des tailles de documents plus importantes, ce qui a un impact potentiellement sur les performances d'écriture et les coûts de stockage, en particulier si les données intégrées sont grandes ou fréquemment mises à jour.
La référence, en revanche, consiste à créer des collections distinctes pour des données connexes et à les lier à l'aide d'ID d'objet. C'est mieux pour les grands ensembles de données fréquemment mis à jour. Les lectures deviennent légèrement plus lentes car elles nécessitent plusieurs requêtes, mais les écritures sont généralement plus rapides et plus efficaces car les documents restent plus petits. La référence aide également à éviter la duplication des données et favorise la normalisation des données. La meilleure approche dépend du cas d'utilisation spécifique et des caractéristiques des données. Considérez la taille des données, la fréquence de mise à jour et les modèles de requête lors de la prise de cette décision.
Interroger et mettre à jour les champs imbriqués nécessite d'utiliser la notation de points que nous avons vue plus tôt. Par exemple, pour mettre à jour un numéro de téléphone spécifique:
<code class="javascript">db.users.updateOne( { "_id": ObjectId("..."), "phones.type": "mobile" }, { $set: { "phones.$.number": "555-9876" } } )</code>
L'opérateur $
cible l'élément de tableau spécifique correspondant à la requête. Pour des requêtes ou des mises à jour plus complexes impliquant des tableaux, envisagez d'utiliser des pipelines d'agrégation. L'agrégation fournit des outils puissants pour le traitement et la transformation des données, y compris les champs imbriqués. Par exemple, vous pouvez utiliser $unwind
pour déconstruire un tableau dans des documents individuels, ce qui facilite la filtration et la mise à jour des éléments spécifiques. N'oubliez pas d'utiliser les index de manière appropriée sur les champs imbriqués pour améliorer les performances de la requête. Les index sur les champs imbriqués sont créés à l'aide de la notation de points dans la commande createIndex
.
La conception d'un schéma évolutif et maintenable avec des documents et des tableaux intégrés nécessite une attention particulière.
En suivant ces meilleures pratiques, vous pouvez créer un schéma MongoDB efficace, évolutif et facile à entretenir. N'oubliez pas que l'approche optimale dépend fortement des besoins spécifiques de votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!