recherche
MaisonPériphériques technologiquesIndustrie informatiqueUtilisation de jointures dans les bases de données MongoDB NOSQL

Using JOINs in MongoDB NoSQL Databases

Points de base

  • MongoDB, une base de données NOSQL, a introduit un nouvel opérateur $lookup dans la version 3.2, qui peut effectuer des opérations de type gauche sur deux ensembles ou plus, réalisant ainsi des données similaires aux bases de données relationnelles. Cependant, cet opérateur est limité à l'utilisation dans les opérations agrégées, qui sont plus complexes et généralement plus lentes que les requêtes de recherche simples.
  • L'opérateur de MongoDB $lookup nécessite quatre paramètres: localField (saisir le champ de recherche dans le document), from (la collection à connecter), foreignField (les champs se trouvent dans la collection de from) et as (nom du champ de sortie). Cet opérateur peut être utilisé dans les requêtes agrégées pour faire correspondre les publications, trier dans l'ordre, limiter le nombre d'éléments, connecter les données de l'utilisateur, aplatir les tableaux d'utilisateur et retourner uniquement les champs nécessaires.
  • Bien que l'opérateur $lookup de MongoDB soit utile et puisse aider à gérer une petite quantité de données relationnelles dans une base de données NoSQL, elle ne remplace pas la clause de jointure plus puissante dans SQL. Si le document utilisateur est supprimé dans MongoDB, le document de publication orphelin sera conservé, indiquant un manque de contraintes. Par conséquent, si l'opérateur $lookup est fréquemment utilisé, il peut indiquer que le mauvais stockage de données est utilisé et qu'une base de données relationnelle (SQL) peut être plus appropriée.

Using JOINs in MongoDB NoSQL Databases Merci à Julian Motz pour son aide à l'examen par les pairs.


L'une des plus grandes différences entre les bases de données SQL et NOSQL est la jointure. Dans une base de données relationnelle, la clause de jointure SQL vous permet de combiner des lignes à partir de deux tables ou plus en utilisant un champ commun entre eux. Par exemple, si vous avez une table de livre et d'éditeur, vous pouvez écrire la commande SQL suivante:

SELECT book.title, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;

En d'autres termes, le tableau du livre a un champ Publisher_id qui fait référence au champ ID dans la table des éditeurs.

Ceci est pratique car un seul éditeur peut fournir des milliers de livres. Si nous devons mettre à jour les détails de l'éditeur à l'avenir, nous pouvons modifier l'enregistrement individuel. La redondance des données est minimisée car nous n'avons pas besoin de répéter les informations de l'éditeur pour chaque livre. Cette technologie est appelée standardisation.

Les bases de données SQL fournissent une gamme de normalisation et de contraintes pour assurer la maintenance des relations.

NOSQL == NON JOIN?

Ce n'est pas toujours le cas…

Les bases de données axées sur le document (telles que MongoDB) sont conçues pour stocker des données dés-normalisées. Idéalement, il ne devrait pas y avoir de relation entre les ensembles. Si les mêmes données doivent être dans deux ou plusieurs documents, elles doivent être répétées.

Cela peut être frustrant car il n'y a presque aucune situation où vous n'aurez jamais besoin de données relationnelles. Heureusement, MongoDB 3.2 a introduit un nouvel opérateur qui peut effectuer des opérations de type gauche sur deux ensembles ou plus. Mais il y a un problème ... $lookup

AGLÉGATION MONGODB

$lookup autorisé uniquement à être utilisé dans les opérations agrégées. Considérez-le comme un pipeline d'une série d'opérateurs qui interrogent, filtrent et groupes de groupe. La sortie d'un opérateur est utilisée comme entrée pour l'opérateur suivant.

Les agrégations sont plus difficiles à comprendre que les requêtes de recherche simples et fonctionnent généralement plus lentement. Cependant, ils sont puissants et sont une option précieuse pour les opérations de recherche complexes.

Il est préférable d'utiliser un exemple pour expliquer l'agrégation. Supposons que nous créons une plate-forme de médias sociaux avec une collection d'utilisateurs. Il stocke les détails de chaque utilisateur dans un document séparé. Par exemple:

SELECT book.title, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;

Nous pouvons ajouter autant de champs que nous le souhaitons, mais tous les documents MongoDB nécessitent un champ _id avec une valeur unique. _id Similaire aux clés primaires SQL, elles seront insérées automatiquement si nécessaire.

Notre réseau social a maintenant besoin d'une collection de publications qui stockent un grand nombre de mises à jour perspicaces des utilisateurs. Le document stocke le texte, la date, la notation et les références à l'utilisateur qui l'a écrit dans le champ user_id:

{
  "_id": ObjectID("45b83bda421238c76f5c1969"),
  "name": "User One",
  "email": "userone@email.com",
  "country": "UK",
  "dob": ISODate("1999-09-13T00:00:00.000Z")
}

Nous voulons maintenant afficher les vingt derniers messages évalués "importants" par tous les utilisateurs dans l'ordre inverse du temps. Chaque document renvoyé doit contenir du texte, l'heure de la publication et le nom et le pays de l'utilisateur associé.

La requête d'agrégation MongoDB passe un tableau d'opérateurs de pipeline qui définissent chaque opération dans l'ordre. Tout d'abord, nous devons utiliser le filtre $match pour extraire tous les documents avec des notes correctes de la collection de post:

{
  "_id": ObjectID("17c9812acff9ac0bba018cc1"),
  "user_id": ObjectID("45b83bda421238c76f5c1969"),
  "date": ISODate("2016-09-05T03:05:00.123Z"),
  "text": "My life story so far",
  "rating": "important"
}

Nous devons maintenant trier les éléments correspondants dans l'ordre inverse en utilisant l'opérateur $sort:

{ "$match": { "rating": "important" } }

Comme nous n'avons besoin que de vingt messages, nous pouvons appliquer la stade $limit afin que MongoDB ne soit que pour traiter les données que nous voulons:

{ "$sort": { "date": -1 } }

Nous pouvons désormais utiliser le nouvel opérateur $lookup pour connecter les données de la collecte des utilisateurs. Il nécessite un objet avec quatre paramètres:

  • localField: Entrez le champ de recherche dans le document
  • from: Collection à connecter
  • foreignField: champs trouvés dans from collection
  • as: le nom du champ de sortie.

Par conséquent, notre opérateur est:

{ "$limit": 20 }

Cela créera un nouveau champ dans notre sortie appelée userinfo. Il contient un tableau où chaque valeur correspond au document utilisateur:

{ "$lookup": {
  "localField": "user_id",
  "from": "user",
  "foreignField": "_id",
  "as": "userinfo"
} }

Nous avons une relation un à un post.user_id et user._id parce qu'un message ne peut avoir qu'un seul auteur. Par conséquent, notre tableau userinfo ne contiendra toujours qu'un seul élément. Nous pouvons utiliser l'opérateur $unwind pour le décomposer en un sous-document:

"userinfo": [
  { "name": "User One", ... }
]

La sortie sera désormais convertie en un format plus pratique, avec d'autres opérateurs disponibles pour postuler:

{ "$unwind": "$userinfo" }

Enfin, nous pouvons utiliser la stade $project dans le pipeline pour retourner le texte, l'heure du poste, le nom de l'utilisateur et le pays:

SELECT book.title, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;

Mettez tout ensemble

Notre requête globale finale correspond aux publications, trie dans l'ordre, limite les vingt derniers éléments, connecte les données utilisateur, afflige les tableaux d'utilisateurs et ne renvoie que les champs nécessaires. Commande complète:

{
  "_id": ObjectID("45b83bda421238c76f5c1969"),
  "name": "User One",
  "email": "userone@email.com",
  "country": "UK",
  "dob": ISODate("1999-09-13T00:00:00.000Z")
}

Le résultat est une collection de vingt documents pouvant aller. Par exemple:

{
  "_id": ObjectID("17c9812acff9ac0bba018cc1"),
  "user_id": ObjectID("45b83bda421238c76f5c1969"),
  "date": ISODate("2016-09-05T03:05:00.123Z"),
  "text": "My life story so far",
  "rating": "important"
}

génial! Je peux enfin passer à nosql!

MongoDB $lookup est utile et puissant, mais même cet exemple de base nécessite une requête d'agrégation complexe. Il ne peut pas remplacer la clause de jointure la plus puissante dans SQL. MongoDB ne fournit pas non plus de contraintes; si le document utilisateur est supprimé, le document de publication orphelin sera conservé.

Idéalement, l'opérateur $lookup doit être rarement nécessaire. Si vous en avez besoin fréquemment, vous avez peut-être utilisé le mauvais magasin de données ...

Si vous avez des données relationnelles, veuillez utiliser une base de données relationnelle (SQL)!

c'est-à-dire $lookup est un ajout populaire à MongoDB 3.2. Il surmonte certains des problèmes les plus frustrants lors de l'utilisation d'une petite quantité de données relationnelles dans une base de données NOSQL.

FAQ sur l'utilisation de JOIN dans les bases de données MongoDB NOSQL (FAQ)

Quelle est la différence entre la connexion SQL et la connexion MongoDB?

Dans une base de données SQL, l'opération de connexion combine des lignes de deux tables ou plus en fonction des colonnes associées entre elles. Cependant, MongoDB, en tant que base de données NOSQL, ne prend pas en charge les connexions SQL traditionnelles. Au lieu de cela, MongoDB fournit deux façons d'effectuer des opérations similaires: l'étape $lookup et l'étape $graphLookup dans l'agrégation. Ces méthodes vous permettent de combiner des données de plusieurs collections en un seul ensemble de résultats.

Comment fonctionne le stade

à MongoDB? $lookup L'étape

dans MongoDB vous permet de connecter des documents à partir d'une autre collection (collection "connectée") et d'ajouter les documents connectés au document d'entrée. La phase $lookup spécifie la "collection," Localfield "et" Foreignfield "pour correspondre au document, et le champ" AS "pour produire le document. Il est similaire à la jointure extérieure gauche dans SQL, renvoyant tous les documents de la collection d'entrée et des documents de correspondance de la collection "From". $lookup

Puis-je effectuer une recherche récursive à l'aide de la connexion MongoDB?

Oui, MongoDB fournit une phase

pour la recherche récursive. L'étape $graphLookup effectue une recherche récursive sur l'ensemble spécifié et peut choisir de limiter la profondeur et l'étendue de la recherche. Il est utile pour interroger des données hiérarchiques ou des graphiques où le nombre de niveaux est inconnu ou peut changer. $graphLookup

Comment optimiser les performances lors de l'utilisation de la connexion MongoDB?

Pour optimiser les performances lors de l'utilisation des connexions MongoDB, considérez les stratégies suivantes: Utilisez des indices pour "Localfield" et "ForeignField" pour accélérer le processus de correspondance; 🎜> Stage

et $lookup étapes pour filtrer et convertir des documents. $match

Puis-je connecter plusieurs collections dans MongoDB?

Oui, vous pouvez connecter plusieurs collections MongoDB en reliant plusieurs étapes $lookup dans un pipeline d'agrégation. Chaque étape $lookup ajoute des documents connectés d'une autre collection au document d'entrée.

Comment gérer les valeurs NULL ou manquantes lors de l'utilisation de la connexion MongoDB?

Lors de l'utilisation de la connexion MongoDB, si le document dans la collection d'entrée ne correspond à aucun document dans la collection "From", la phase $lookup ajoute un tableau vide au champ "AS". Vous pouvez gérer ces valeurs nulles ou manquantes en ajoutant la phase $lookup après la phase $match pour filtrer les documents avec des champs vides "comme" champs.

Puis-je utiliser la connexion MongoDB avec des collections fragnées?

En commençant par MongoDB 3.6, les étapes $lookup et $graphLookup peuvent accepter les ensembles frappés comme "à partir de" ensembles. Cependant, en raison de la surcharge supplémentaire du réseau, les performances peuvent ne pas être aussi bonnes que les collections non ravières.

Comment trier les documents connectés dans MongoDB?

Vous pouvez trier les documents connectés dans MongoDB en ajoutant la phase $lookup après la phase $sort dans le pipeline d'agrégation. La scénario $sort trie les documents dans le champ spécifié dans l'ordre croissant ou descendant.

Puis-je utiliser la connexion MongoDB avec la méthode find()?

Non, la connexion MongoDB ne peut pas être utilisée avec la méthode find(). Les étapes $lookup et $graphLookup font partie du cadre d'agrégation qui fournit des capacités de traitement des données plus avancées que la méthode find().

Comment déboguer ou dépanner l'échec de la connexion MongoDB?

Pour déboguer ou dépanner les défaillances de connexion MongoDB, vous pouvez utiliser la méthode explain() pour analyser le plan d'exécution du pipeline agrégé. La méthode explain() fournit des informations détaillées sur l'étape, y compris le nombre de documents traités, le temps passé et l'utilisation de l'index.

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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derrière le premier accès Android à Deepseek: voir le pouvoir des femmesDerrière le premier accès Android à Deepseek: voir le pouvoir des femmesMar 12, 2025 pm 12:27 PM

La montée en puissance du pouvoir technologique des femmes chinoises dans le domaine de l'IA: l'histoire de la collaboration d'honneur avec la contribution des femmes en profondeur au domaine de la technologie devient de plus en plus significative. Les données du ministère des Sciences et de la Technologie de la Chine montrent que le nombre de travailleuses scientifiques et technologiques est énorme et montre une sensibilité à la valeur sociale unique dans le développement des algorithmes d'IA. Cet article se concentrera sur l'honneur des téléphones mobiles et explorera la force de l'équipe féminine derrière qu'elle soit la première à se connecter au grand modèle Deepseek, montrant comment ils peuvent promouvoir le progrès technologique et remodeler le système de coordonnées de valeur de développement technologique. Le 8 février 2024, Honor a officiellement lancé le Big Model de Deepseek-R1, devenant le premier fabricant du camp Android à se connecter à Deepseek, excitant la réponse enthousiaste des utilisateurs. Dant ce succès, les membres de l'équipe féminine prennent des décisions de produits, des percées techniques et des utilisateurs

Le profit 'incroyable' de Deepseek: la marge bénéficiaire théorique est aussi élevée que 545%!Le profit 'incroyable' de Deepseek: la marge bénéficiaire théorique est aussi élevée que 545%!Mar 12, 2025 pm 12:21 PM

Deepseek a publié un article technique sur Zhihu, présentant en détail son système d'inférence Deepseek-V3 / R1, et a révélé pour la première fois des données financières clés, ce qui a attiré l'attention de l'industrie. L'article montre que la marge de bénéfice des coûts quotidiens du système atteint 545%, ce qui établit un nouveau profit mondial dans le modèle mondial de l'IA. La stratégie à faible coût de Deepseek lui donne un avantage dans la concurrence du marché. Le coût de sa formation sur modèle n'est que de 1% à 5% des produits similaires, et le coût de la formation du modèle V3 n'est que de 5,576 millions de dollars, bien inférieur à celui de ses concurrents. Pendant ce temps, la tarification de l'API de R1 n'est que de 1/7 à 1/2 d'Openaio3-MinI. Ces données prouvent la faisabilité commerciale de la voie technologique profonde et établissent également la rentabilité efficace des modèles d'IA.

Top 10 des meilleurs outils de vérificateur de backlink gratuit en 2025Top 10 des meilleurs outils de vérificateur de backlink gratuit en 2025Mar 21, 2025 am 08:28 AM

La construction du site Web n'est que la première étape: l'importance du référencement et des backlinks La construction d'un site Web n'est que la première étape pour la convertir en un actif marketing précieux. Vous devez faire l'optimisation du référencement pour améliorer la visibilité de votre site Web dans les moteurs de recherche et attirer des clients potentiels. Les backlinks sont la clé pour améliorer le classement de votre site Web, et il montre à Google et à d'autres moteurs de recherche l'autorité et la crédibilité de votre site Web. Tous les backlinks ne sont pas bénéfiques: identifier et éviter les liens nocifs Tous les backlinks ne sont pas bénéfiques. Les liens nocifs peuvent nuire à votre classement. Excellent outil de vérification de la liaison backlink gratuite surveille la source des liens vers votre site Web et vous rappelle les liens nuisibles. De plus, vous pouvez également analyser les stratégies de liaison de vos concurrents et en apprendre. Outil de vérification gratuite de backlink: votre agent de renseignement SEO

Midea lance son premier climatiseur Deepseek: l'interaction vocale AI peut réaliser 400 000 commandes!Midea lance son premier climatiseur Deepseek: l'interaction vocale AI peut réaliser 400 000 commandes!Mar 12, 2025 pm 12:18 PM

MIDEA publiera bientôt son premier climatiseur équipé d'un grand modèle Deepseek - MIDEA Fresh and Clean Air Machine T6. Ce climatiseur est équipé d'un système de conduite intelligent avancé, qui peut ajuster intelligemment les paramètres tels que la température, l'humidité et la vitesse du vent en fonction de l'environnement. Plus important encore, il intègre le grand modèle Deepseek et prend en charge plus de 400 000 commandes vocales AI. La décision de Midea a provoqué des discussions animées dans l'industrie et est particulièrement préoccupé par l'importance de la combinaison de produits blancs et de grands modèles. Contrairement aux paramètres de température simples des climatiseurs traditionnels, MIDEA Fresh Air Machine T6 peut comprendre des instructions plus complexes et vagues et ajuster intelligemment l'humidité en fonction de l'environnement familial, améliorant considérablement l'expérience utilisateur.

Un autre produit national de Baidu est lié à Deepseek.Un autre produit national de Baidu est lié à Deepseek.Mar 12, 2025 pm 01:48 PM

Deepseek-R1 autorise la bibliothèque Baidu et NetDisk: L'intégration parfaite de la pensée et de l'action profondes s'est rapidement intégrée à de nombreuses plateformes en seulement un mois. Avec sa disposition stratégique audacieuse, Baidu intègre Deepseek en tant que partenaire modèle tiers et l'intégre dans son écosystème, qui marque un progrès majeur dans sa stratégie écologique de "Big Model Search". Baidu Search et Wenxin Intelligent Intelligent Platform sont les premiers à se connecter aux fonctions de recherche profonde des grands modèles Deepseek et Wenxin, offrant aux utilisateurs une expérience de recherche IA gratuite. Dans le même temps, le slogan classique de "Vous saurez quand vous allez à Baidu", et la nouvelle version de l'application Baidu intègre également les capacités du Big Model et Deepseek de Wenxin, lançant "AI Search" et "Wide Network Information Raffinement"

Construire un scanner de vulnérabilité de réseau avec GoConstruire un scanner de vulnérabilité de réseau avec GoApr 01, 2025 am 08:27 AM

Ce scanner de vulnérabilité de réseau basé sur GO identifie efficacement les faiblesses de sécurité potentielles. Il exploite les fonctionnalités de concurrence de GO pour la vitesse et comprend la détection de services et la correspondance de vulnérabilité. Explorons ses capacités et ses éthiques

Ingénierie rapide pour le développement WebIngénierie rapide pour le développement WebMar 09, 2025 am 08:27 AM

Ingénierie rapide de l'IA pour la génération de code: guide d'un développeur Le paysage du développement du code est prêt pour un changement significatif. La maîtrise des modèles de grande langue (LLMS) et de l'ingénierie rapide sera crucial pour les développeurs dans les années à venir. Ème

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux