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

MySQL vers MongoDB - Une feuille de triche d'administrateur

La plupart des applications logicielles impliquent aujourd'hui un stockage de données dynamique pour une référence future étendue dans l'application elle-même. Nous savons tous que les données sont stockées dans une base de données qui se divise en deux catégories :les SGBD relationnels et non relationnels.

Votre choix de sélection parmi ces deux dépendra entièrement de votre structure de données, de la quantité de données impliquées, des performances et de l'évolutivité de la base de données.

Les SGBD relationnels stockent les données dans des tables en termes de lignes de sorte qu'ils utilisent le langage SQL (Structured Querying Language), ce qui en fait un bon choix pour les applications impliquant plusieurs transactions. Ils incluent MySQL, SQLite et PostgreSQL.

D'autre part, les SGBD NoSQL tels que MongoDB sont orientés document, de sorte que les données sont stockées dans des collections en termes de documents. Cela donne une plus grande capacité de stockage pour un grand ensemble de données, d'où un avantage supplémentaire en termes d'évolutivité.

Dans ce blog, nous supposons que vous avez une meilleure connaissance de MongoDB ou de MySQL et que vous aimeriez donc connaître la corrélation entre les deux en termes d'interrogation et de structure de base de données.

Vous trouverez ci-dessous une feuille de triche pour vous familiariser davantage avec l'interrogation de MySQL à MongoDB.

Feuille de triche MySQL vers MongoDB – Termes

Termes MySQL Conditions MongoDB Explication
Tableau Collection Il s'agit du conteneur de stockage des données qui ont tendance à être similaires dans les objets contenus.
Ligne Document Définit l'entité d'objet unique dans la table pour MySQL et la collection dans le cas de MongoDB.
Colonne Champ Pour chaque élément stocké, il a des propriétés qui sont définies par différentes valeurs et types de données. Dans MongoDB, les documents d'une même collection peuvent avoir des champs différents les uns des autres. Dans MySQL, chaque ligne doit être définie avec les mêmes colonnes que celles existantes.
Clé primaire Clé primaire Chaque objet stocké est identifié par une valeur de champ unique. Dans le cas de MongoDB, le champ _id est défini automatiquement, tandis que dans MySQL, vous pouvez définir votre propre clé primaire qui est incrémentielle lorsque vous créez de nouvelles lignes.
Jointures de tables Intégrer et lier des documents Connexion associée à un objet dans une autre collection/table aux données d'une autre collection/table.
$match Sélectionner des données qui correspondent aux critères.
groupe $groupe Regroupement des données selon certains critères.
déposer $unset Supprimer une colonne/un champ d'une ligne/un document/
définir $set Définition de la valeur d'une colonne/champ existante sur une nouvelle valeur.
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

Déclarations de schéma

Instructions de table MySQL Déclarations de collecte MongoDB Explication

La base de données et les tables sont créées explicitement via le panneau d'administration PHP ou définies dans un script, c'est-à-dire

Création d'une base de données

CREATE DATABASE database_name

Création d'un tableau

CREATE TABLE users (
    id MEDIUMINT NOT NULL
        AUTO_INCREMENT,
    UserId Varchar(30),
    Age Number,
    Gender char(1),
    Name VarChar(222),
    PRIMARY KEY (id)
)

La base de données peut être créée implicitement ou explicitement. Implicitement lors de la première insertion de document, la base de données et la collection sont créées ainsi qu'un champ _id automatique ajouté à ce document.

db.users.insert( {
    UserId: "user1",
    Age: 55,
    Name: "Berry Hellington",
    Gender: "F",
 } )

Vous pouvez également créer la base de données explicitement en exécutant ce commentaire dans le Mongo Shell

db.createCollection("users")

Dans MySQL, vous devez spécifier les colonnes de la table que vous créez ainsi que définir certaines règles de validation comme dans cet exemple le type de données et la longueur qui vont à une colonne spécifique. Dans le cas de MongoDB, il n'est pas indispensable de définir ni les champs que chaque document doit contenir ni les règles de validation que les champs spécifiés doivent contenir.

Cependant, dans MongoDB pour l'intégrité et la cohérence des données, vous pouvez définir les règles de validation à l'aide du JSON SCHEMA VALIDATOR

Déposer une table

DROP TABLE users
db.users.drop()

Ce sont des instructions pour supprimer une table pour MySQL et une collection dans le cas de MongoDB.

Ajout d'une nouvelle colonne appelée join_date

ALTER TABLE users ADD join_date DATETIME

Suppression de la colonne join_date si déjà définie

ALTER TABLE users DROP COLUMN join_date DATETIME

Ajout d'un nouveau champ appelé join_date

db.users.updateMany({},{$set:{‘join_date’: new Date()})

Cela mettra à jour tous les documents de la collection pour que la date de jointure soit la date actuelle.

Suppression du champ join_date s'il est déjà défini

db.users.updateMany({},{$unset:{‘join_date’: “”})

Cela supprimera le champ join_date de tous les documents de collection.

Modification de la structure du schéma en ajoutant ou en supprimant une colonne/un champ.

Étant donné que l'architecture MongoDB ne s'applique pas strictement à la structure du document, les documents peuvent avoir des champs différents les uns des autres.

Création d'un index avec la colonne UserId ascendante et Age descendant

CREATE INDEX idx_UserId_asc_Age_desc
ON users(UserId)

Création d'un index impliquant les champs UserId et Age.

db.users.ensureIndex( { UserId: 1, Age: -1 } )

Les index sont généralement créés pour faciliter le processus d'interrogation.

INSERT INTO users(UserId,
                  Age,
                  Gender)
VALUES ("user1",
        25,
        "M")
db.users.insert( {
       UserId: "bcd001",
       Age: 25,
       Gender: "M",
     Name: "Berry Hellington",
} )

Insertion de nouveaux enregistrements.

DELETE FROM users
WHERE Age = 25
db.users.deleteMany( { Age = 25 } )

Suppression des enregistrements de la table/collection dont l'âge est égal à 25.

DELETE FROM users
db.users.deleteMany({})

Suppression de tous les enregistrements de la table/collection.

SELECT * FROM users
db.users.find()

Renvoie tous les enregistrements de la table/collection des utilisateurs avec toutes les colonnes/champs.

SELECT id, Age, Gender FROM users
db.users.find(
   { },
   { Age: 1, Gender: 1 }
)

Renvoie tous les enregistrements de la table/collection des utilisateurs avec l'âge, le sexe et les colonnes/champs de clé primaire.

SELECT  Age, Gender FROM users
db.users.find(
   { },
 { Age: 1, Gender: 1,_id: 0}
)

Renvoie tous les enregistrements de la table/collection des utilisateurs avec les colonnes/champs Âge et Sexe. La clé primaire est omise.

SELECT * FROM users WHERE Gender = “M”
db.users.find({ Gender: "M"})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Sexe est définie sur M.

SELECT Gender FROM users WHERE Age = 25
db.users.find({ Age: 25}, { _id: 0, Gender: 1})

Renvoie tous les enregistrements de la table/collection des utilisateurs avec uniquement la valeur Sexe mais dont la valeur Âge est égale à 25.

SELECT * FROM users WHERE Age = 25 AND Gender = ‘F’
db.users.find({ Age: 25, Gender: "F"})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Sexe est définie sur F et l'âge est 25.

SELECT * FROM users WHERE  Age != 25
db.users.find({ Age:{$ne: 25}})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Age n'est pas égale à 25.

SELECT * FROM users WHERE Age = 25 OR Gender = ‘F’
db.users.find({$or:[{Age: 25, Gender: "F"}]})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Sexe est définie sur F ou dont l'âge est de 25 ans.

SELECT * FROM users WHERE Age > 25
db.users.find({ Age:{$gt: 25}})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Age est supérieure à 25.

SELECT * FROM users WHERE Age <= 25
db.users.find({ Age:{$lte: 25}})

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Age est inférieure ou égale à 25.

SELECT Name FROM users WHERE Name like "He%"
db.users.find(
  { Name: /He/ }
)

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Nom se trouve avoir des lettres He.

SELECT * FROM users WHERE Gender = ‘F’ ORDER BY id ASC
db.users.find( { Gender: "F" } ).sort( { $natural: 1 } )

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Gender est définie sur F et trie ce résultat dans l'ordre croissant de la colonne id dans le cas de MySQL et de l'heure insérée dans le cas de MongoDB.

SELECT * FROM users WHERE Gender = ‘F’ ORDER BY id DESC
db.users.find( { Gender: "F" } ).sort( { $natural: -1 } )

Renvoie tous les enregistrements de la table/collection des utilisateurs dont la valeur Gender est définie sur F et trie ce résultat dans l'ordre décroissant de la colonne id dans le cas de MySQL et de l'heure insérée dans le cas de MongoDB.

SELECT COUNT(*) FROM users
db.users.count()

ou

db.users.find().count()

Compte tous les enregistrements dans la table/collection des utilisateurs.

SELECT COUNT(Name) FROM users
db.users.count({Name:{ $exists: true }})

ou

db.users.find({Name:{ $exists: true }}).count()

Compte tous les enregistrements de la table/collection des utilisateurs qui ont une valeur pour la propriété Name.

SELECT * FROM users LIMIT 1
db.users.findOne()

ou

db.users.find().limit(1)

Renvoie le premier enregistrement de la table/collection des utilisateurs.

SELECT * FROM users WHERE Gender = ‘F’ LIMIT 1
db.users.find( { Gender: "F" } ).limit(1)

Renvoie le premier enregistrement de la table/collection des utilisateurs qui a une valeur de sexe égale à F.

SELECT * FROM users LIMIT 5 SKIP 10
db.users.find().limit(5).skip(10)

Renvoie les cinq enregistrements de la table/collection des utilisateurs après avoir ignoré les cinq premiers enregistrements.

UPDATE users SET Age = 26 WHERE age > 25
db.users.updateMany(
  { age: { $gt: 25 } },
  { $set: { Age: 26 } }
)

Cela définit l'âge de tous les enregistrements de la table/collection des utilisateurs dont l'âge est supérieur à 25 à 26 ans.

UPDATE users SET age = age + 1
db.users.updateMany(
  {} ,
  { $inc: { age: 1 } }
)

Cela augmente l'âge de tous les enregistrements de la table/collection des utilisateurs de 1.

UPDATE users SET age = age - 1
WHERE id = 1
db.users.updateMany(
  {} ,
  { $inc: { age: -1 } }
)

Cela décrémente l'âge du premier enregistrement dans la table/collection des utilisateurs de 1.

Pour gérer MySQL et/ou MongoDB de manière centralisée et à partir d'un point unique, visitez :https://severalnines.com/product/clustercontrol.