MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Liaison et création de jointures MongoDB à l'aide de SQL :partie 1

SQL est le moyen le plus préféré d'engager des bases de données relationnelles en ce qui concerne l'interrogation. Il est entendu que les utilisateurs auraient travaillé avec des bases de données relationnelles telles que MySQL et PostgreSQL qui utilisent la fonction d'interrogation SQL. Généralement, SQL est facile à comprendre et est donc devenu largement utilisé, en particulier dans les bases de données relationnelles.

Cependant, SQL est assez complexe lorsqu'il s'agit d'engager un large ensemble de documents dans une base de données. En un mot, il n'est pas destiné aux bases de données documentaires car il comporte un certain nombre de revers. Par exemple, vous ne pouvez pas interroger facilement les documents de tableau intégrés ou vous devrez plutôt concevoir un sous-programme pour itérer et filtrer les données renvoyées pour donner les résultats requis. Par conséquent, cela se traduira par un incrément de la durée d'exécution. Mais avoir une bonne compréhension de SQL fournira une meilleure base pour interagir avec MongoDB à partir d'un certain point plutôt que de partir de zéro.

Dans ce blog, nous utiliserons le programme Studio 3T pour montrer les différentes requêtes de jointure SQL et comment vous pouvez les reconcevoir en requêtes MongoDB pour obtenir de meilleures performances. Le programme peut être téléchargé à partir de ce lien.

Connexion SQL à MongoDB

Il existe plusieurs pilotes ou plutôt des interfaces à travers lesquelles vous pouvez utiliser SQL pour communiquer avec MongoDB, par exemple, ODBC. ODBC signifie Open Database Connectivity. Il s'agit simplement d'une interface qui permet aux applications d'accéder aux données dans les systèmes de gestion de base de données en utilisant SQL comme processus standard d'accès à ces données. Il est livré avec un avantage d'interopérabilité supplémentaire grâce auquel une seule application peut accéder à plusieurs systèmes de gestion de base de données.

Dans ce blog, nous allons produire et tester du code à partir de SQL puis l'optimiser via un éditeur d'agrégation pour produire une requête MongoDB.

Tableau de mappage pour SQL vers MongoDB

Avant d'entrer dans les détails, nous devons comprendre les relations de base entre ces 2 bases de données, en particulier les mots-clés dans le concept d'interrogation.

Terminologie et concepts

SQL MongoDB
Table
Ligne
Colonne
Jointures de table
Collection
Document BSON
Champ
$lookup

La clé primaire dans SQL définit une colonne unique qui organise essentiellement les lignes par ordre de temps d'enregistrement. D'autre part, la clé primaire dans MongoDB est un champ unique pour contenir un document et garantir que les champs indexés ne stockent pas de valeurs en double.

Plusieursnines Devenez un administrateur de base de données MongoDB – Amener MongoDB en productionDécouvrez ce que vous devez savoir pour déployer, surveiller, gérer et faire évoluer MongoDBDélécharger gratuitement

Corrélation entre SQL et MongoDB

Supposons que nous ayons des données sur un étudiant et que nous souhaitions enregistrer ces données à la fois dans la base de données SQL et dans MongoDB. Nous pouvons définir un simple objet étudiant comme :

{
    name: ‘James Washington’,
    age: 15,
    grade: A,
    Score: 10.5
}

Lors de la création d'une table SQL, nous devons définir les noms des colonnes et le type de données alors que dans MongoDB, une collection sera automatiquement créée lors de la première insertion.

Le tableau ci-dessous nous aidera à comprendre comment certaines instructions SQL peuvent être écrites dans MongoDB.

Instruction de schéma SQL Instructions de schéma MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Pour insérer un document dans la base de données

INSERT INTO students(Name, age, grade,score) VALUES(“James Washington”, 15, “A”, 10.5)

Nous pouvons définir une conception de schéma en utilisant certains modules tels que mongoose et définir les champs comme un objet plutôt que d'insérer directement un document pour montrer la corrélation. L'identifiant de fichier principal sera généré automatiquement lors de l'insertion d'un document.

{
  name: String,
  age Number,
  score: Number
}

Insertion d'un nouveau document pour créer la collection

db.students.insertOne({
    name: ‘James Washington’,
    age: 15,
    grade: ‘A’,
    score: 10.5
})

Utilisation de l'instruction ADD pour ajouter une nouvelle colonne à la table existante.

ALTER TABLE students ADD units 10

La structure des documents de collection n'est pas bien définie et met donc à jour les documents au niveau du document à l'aide de updateMany()

db.students.updateMany({}, {$set: {units: 10}})

Pour supprimer une colonne (unités)

ALTER TABLE students DROP COLUMN units

Pour déposer un champ (unités)

db.students.updateMany({}, {$unset: {units: “”}})

Déposer un tableau élèves

DROP TABLE students

Pour déposer les élèves de collection

db.students.drop()
Instruction SQL Select Instructions de recherche MongoDB

Sélectionner toutes les lignes

SELECT * FROM students

Sélectionner tous les documents

db.students.find()

Pour renvoyer uniquement des colonnes spécifiques.

SELECT name, grade FROM students

Pour renvoyer uniquement des champs spécifiques. Par défaut, le champ _id est renvoyé sauf indication contraire dans le processus de projection.

db.students.find({}, {name: 1, grade: 1, _id: 0})

Définir le _id :0 signifie que seul le document renvoyé aura le nom et les valeurs d'objet de note uniquement.

Pour sélectionner des lignes spécifiques avec une valeur de colonne correspondante.

SELECT * FROM students WHERE grade = “A”

Pour sélectionner des documents spécifiques avec une valeur de champ correspondante.

db.students.find({grade: “A”})

Sélection de lignes avec une colonne dont les valeurs ont des caractères comme valeur de critère fournie

SELECT * FROM students WHERE name like  “James%”

Sélection de documents avec un champ dont les valeurs ont des caractères comme valeur de critère fournie

db.students.find({grade: {$regex: /^James/}})

Pour renvoyer les lignes dans un ordre croissant à l'aide de la clé primaire.

SELECT * FROM students ORDER BY id ASC

Renvoyer les documents dans un ordre croissant à l'aide de la clé primaire

db.students.find().sort({$natural: 1})

Pour regrouper les lignes renvoyées conformément à une colonne (note)

SELECT DISTINCT (grade) FROM students

Pour regrouper les documents retournés en fonction d'un champ (grade)

db.students.aggregate([
{$group: : {_id: “$grade”}}
]

Limiter le nombre de lignes renvoyées et en ignorer certaines

SELECT * FROM students LIMIT 1 SKIP 4

Limiter le nombre de documents retournés et sauter des lignes

db.students.find.limit(1).skip(4)

Une option essentielle est de savoir comment notre requête est exécutée, donc utilisez la méthode d'explication.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Instruction de mise à jour SQL Déclarations de mise à jour de MongoDB

Mettre à jour la colonne des notes pour les élèves dont l'âge est égal ou supérieur à 15 ans

UPDATE students SET grade  = “B” WHERE age >= 15

Ici, nous utilisons des opérateurs tels que $gt, $lt et $lte.

db.students.updateMany({age: {$gte: 15}}, {$set: {status: “B”}})

Incrémenter une valeur de colonne

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Instruction de suppression SQL MongoDB supprime les déclarations

Pour supprimer toutes les lignes

DELETE FROM students

Pour supprimer tous les documents.

db.students.remove({})

Pour supprimer une ligne spécifique où une colonne a une valeur spécifique.

DELETE FROM students WHERE age = 15
db.students.remove({age: 15})

Cet exemple de tableau de mappage vous permettra de mieux comprendre ce que nous allons apprendre dans notre prochain sujet.

SQL et Studio 3T

Studio 3T est l'un des programmes disponibles qui permet de connecter SQL et MongoDB. Il a une fonctionnalité de requête SQL pour en améliorer une pour manipuler SQL. La requête est interprétée dans le shell Mongo pour produire un code de requête simple dans l'équivalent du langage MongoDB. En plus de faire des requêtes simples, l'application Studio 3T peut maintenant faire des jointures.

Pour nos exemples de données ci-dessus, après avoir connecté votre base de données dans Studio 3T, nous pouvons utiliser la fenêtre SQL pour trouver le document qui correspond à nos critères, c'est-à-dire :

SELECT * FROM students  WHERE name LIKE  'James%';

Si vous avez un document avec un champ de nom défini sur la valeur James, il sera renvoyé. De même, si vous cliquez sur l'onglet du code de requête, une fenêtre avec le code MongoDB équivalent s'affichera. Pour la déclaration ci-dessus, nous aurons :

db.getCollection("students").find(
    { 
        "name" : /^James.*$/i
    }
);

Résumé

Parfois, vous voudrez peut-être un moyen rapide d'interagir avec MongoDB à partir des connaissances que vous avez sur SQL. Nous avons appris quelques similitudes de code de base entre SQL et son équivalent dans MongoDB. De plus, certains programmes tels que Studio 3T disposent d'outils bien établis pour convertir la requête SQL en langage équivalent MongoDB et affiner cette requête pour de meilleurs résultats. Eh bien, pour la plupart d'entre nous, ce sera un excellent outil pour faciliter notre travail et garantir que le code que nous avons à la fin est très optimal pour les performances de notre base de données. Dans la partie 2 de ce blog, nous allons en savoir plus sur SQL INNER JOIN dans MongoDB.