Introduction à MongoDB
Qu'est-ce que MongoDB ?
MongoDB est une base de données NoSQL orientée documents, conçue pour stocker des données de manière flexible et évolutive. Contrairement aux bases de données relationnelles (SQL), MongoDB utilise un modèle de données basé sur des documents, facilitant la gestion des données semi-structurées ou non structurées.
Exemple de Document JSON :
{ "_id": "1a2b3c", "nom": "Alice", "age": 29, "adresse": { "rue": "123 Avenue", "ville": "Paris", "code_postal": "75001" }, "interets": ["voyage", "lecture", "programmation"] }
Avantages de MongoDB
- Flexibilité du schéma : Permet de modifier la structure des documents sans avoir à redéfinir le schéma de la base de données.
- Scalabilité : MongoDB peut être partitionné horizontalement (sharding) pour gérer de grandes quantités de données et de trafic.
- Stockage de documents complexes : Idéal pour les applications avec des structures de données complexes, comme les applications web et mobiles modernes.
MongoDB dans l'écosystème NoSQL
MongoDB fait partie de la famille NoSQL, avec un modèle de données non relationnel. Dans une base de données MongoDB, les données sont stockées sous forme de documents JSON/BSON, ce qui permet de structurer les informations sous forme de paires clé-valeur.
Qu'est-ce que NoSQL ?
NoSQL est un type de base de données qui fournit une approche différente de celle des bases de données relationnelles traditionnelles (SQL). Conçues pour une flexibilité et une scalabilité accrues, les bases de données NoSQL sont particulièrement adaptées aux applications modernes nécessitant des performances élevées et un traitement de grandes quantités de données non structurées ou semi-structurées.
Pourquoi choisir NoSQL ?
- Scalabilité horizontale : NoSQL permet d'ajouter facilement des serveurs pour distribuer les données et les traitements.
- Flexibilité du schéma : Les bases de données NoSQL n'imposent pas de structure rigide. Cela permet aux développeurs de modifier le schéma sans migration complexe.
- Performance : Adapté pour les applications nécessitant un traitement rapide et une faible latence.
Principaux types de bases de données NoSQL
- Bases de données orientées documents : Stockent les données sous forme de documents (ex : MongoDB).
- Bases de données orientées colonnes : Organisent les données par colonnes pour une analyse rapide (ex : Cassandra).
- Bases de données clé-valeur : Utilisent des paires clé-valeur pour des recherches rapides (ex : Redis).
- Bases de données orientées graphes : Idéales pour les données avec relations complexes (ex : Neo4j).
Comparaison SQL vs NoSQL
Voici un exemple comparant une table SQL à un document NoSQL pour mieux comprendre les différences :
SQL :
TABLE Utilisateurs
| id | nom | age | ville |
|----|-----------|-----|---------|
| 1 | Alice | 29 | Paris |
| 2 | Bob | 34 | Lyon |
NoSQL (MongoDB) :
[ { "_id": "1", "nom": "Alice", "age": 29, "ville": "Paris" }, { "_id": "2", "nom": "Bob", "age": 34, "ville": "Lyon" } ]
Cas d'utilisation de NoSQL
Les bases de données NoSQL sont couramment utilisées dans les cas suivants :
- Applications à grande échelle : Réseaux sociaux, e-commerce, jeux en ligne, etc.
- Applications nécessitant une flexibilité des données : Services de streaming, IoT, analyses de données en temps réel.
- Applications nécessitant une haute disponibilité : Chat en direct, suivi des événements, etc.
Avantages de MongoDB
MongoDB est l'une des bases de données NoSQL les plus populaires, offrant des avantages qui le rendent idéal pour les applications modernes. Voici quelques raisons pour lesquelles MongoDB est apprécié par les développeurs :
Flexibilité du schéma
MongoDB ne nécessite pas de schéma strict, ce qui signifie que les documents peuvent évoluer au fil du temps sans modifications structurelles complexes. Cela permet aux développeurs d’adapter facilement la base de données aux besoins de l’application.
Scalabilité horizontale
Grâce au sharding, MongoDB peut répartir les données sur plusieurs serveurs. Cela permet de gérer des volumes de données considérables et d'augmenter la capacité de l'application sans perdre en performance.
Haute disponibilité avec réplication
MongoDB utilise des ensembles de réplicas pour garantir que les données soient disponibles même en cas de panne. Les données sont dupliquées sur plusieurs serveurs, offrant une tolérance aux pannes.
Performance élevée
Optimisé pour les charges de lecture et écriture élevées, MongoDB est particulièrement rapide pour les applications nécessitant une faible latence, telles que les sites de e-commerce ou les applications en temps réel.
Support pour les données non structurées
Parfait pour gérer les données non structurées, MongoDB peut stocker des données variées comme des logs, des données de capteurs, ou des informations de réseaux sociaux, sans avoir besoin d'un format strict.
Écosystème riche et intégrations modernes
MongoDB propose des outils comme MongoDB Atlas pour le cloud, MongoDB Compass pour l’analyse graphique et supporte des langages populaires comme Node.js et Python, facilitant le développement d'applications modernes et robustes.
Limitations de MongoDB
Bien que MongoDB présente de nombreux avantages, il est important de connaître ses limitations pour faire un choix éclairé. Voici quelques défis courants associés à MongoDB :
Absence de transactions complexes
MongoDB n'est pas optimisé pour les transactions multi-documents avec garanties ACID (atomicité, cohérence, isolation, durabilité), bien que certaines améliorations aient été apportées. Cela peut limiter son utilisation pour des applications nécessitant des transactions complexes.
Consommation d'espace de stockage élevée
Les documents BSON, format utilisé par MongoDB, consomment souvent plus d’espace que les enregistrements SQL traditionnels, en particulier pour des applications avec de nombreuses données imbriquées.
Limites de cohérence pour certaines applications
MongoDB privilégie la performance et la flexibilité, ce qui peut entraîner des compromis en matière de cohérence dans les configurations hautement distribuées. Ce manque de cohérence peut être problématique pour des applications nécessitant une précision absolue des données.
Gestion de jointures limitée
MongoDB ne gère pas les jointures de manière aussi naturelle que les bases de données relationnelles. Bien que l'agrégation lookup permette d'assembler des collections, elle reste moins performante et moins flexible que les jointures SQL.
Manque de standardisation des requêtes
MongoDB utilise sa propre syntaxe de requête, qui diffère de SQL. Les développeurs doivent apprendre cette syntaxe, ce qui peut limiter la portabilité des compétences et des requêtes entre différents types de bases de données.
Coûts de licence pour MongoDB Enterprise et MongoDB Atlas
Bien que MongoDB soit open-source, les versions avancées comme MongoDB Enterprise et MongoDB Atlas incluent des frais pour des fonctionnalités supplémentaires telles que la sécurité avancée et la gestion des clusters, ce qui peut augmenter les coûts d'exploitation.
Installation de MongoDB
MongoDB peut être installé sur plusieurs systèmes d’exploitation. Voici les étapes pour installer MongoDB sur Windows, macOS et Linux.
Installation sur Windows
1. Téléchargez l'installateur MongoDB depuis le site officiel de MongoDB.
2. Lancez l'installateur et sélectionnez "Complete" pour une installation complète.
3. Cochez "Install MongoDB as a Service" pour que MongoDB démarre automatiquement.
4. Cliquez sur "Finish" pour terminer l'installation.
# Vérifiez l'installation en exécutant : mongo --version
Installation sur macOS
1. Ouvrez le terminal et installez Homebrew (si non installé) :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew tap mongodb/brew brew install mongodb-community@5.0
brew services start mongodb/brew/mongodb-community
Installation sur Linux
1. Importez la clé publique de MongoDB :
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt update sudo apt install -y mongodb-org
sudo systemctl start mongod
Vérification de l'installation
Pour vérifier que MongoDB est bien installé, exécutez la commande suivante dans votre terminal ou invite de commande :
mongo --version
Configuration de MongoDB
Une fois MongoDB installé, certaines configurations de base sont nécessaires pour l'adapter à vos besoins et optimiser ses performances. Voici comment configurer MongoDB pour un usage basique.
Répertoires de données et de journaux
MongoDB stocke ses données et journaux dans des répertoires par défaut. Vous pouvez personnaliser ces répertoires pour mieux organiser vos données. Par défaut :
- **Linux/macOS** :
/var/lib/mongo
(données),/var/log/mongodb
(journaux) - **Windows** :
C:\Program Files\MongoDB\Server\
(données),\data C:\Program Files\MongoDB\Server\
(journaux)\log
Pour modifier ces répertoires, accédez au fichier de configuration mongod.conf
et mettez à jour les chemins sous les sections storage.dbPath
et systemLog.path
.
# Exemple de configuration dans mongod.conf storage: dbPath: "/custom/path/to/data" systemLog: destination: file path: "/custom/path/to/log/mongodb.log"
Activer l'authentification
Pour sécuriser votre base de données, il est recommandé d’activer l’authentification. Sans authentification, toute personne ayant accès au serveur peut accéder aux données.
1. Dans le fichier mongod.conf
, ajoutez ou modifiez la ligne suivante :
security: authorization: "enabled"
2. Redémarrez MongoDB pour appliquer la configuration.
Création d'un utilisateur administrateur
Une fois l'authentification activée, créez un utilisateur administrateur pour gérer les bases de données :
# Connectez-vous à MongoDB mongo # Passez à la base de données d'administration use admin # Créez un utilisateur administrateur db.createUser({ user: "admin", pwd: "votre_mot_de_passe_sécurisé", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
Configurer le réseau
Par défaut, MongoDB écoute uniquement sur localhost
pour des raisons de sécurité. Pour autoriser l'accès distant :
1. Modifiez le fichier mongod.conf
:
net: bindIp: 0.0.0.0 # écoute sur toutes les interfaces
2. Redémarrez MongoDB pour appliquer la modification. **Attention :** Autoriser l'accès distant peut exposer votre base de données. Assurez-vous de configurer un pare-feu et d’activer l'authentification.
Redémarrage de MongoDB
Après chaque modification de mongod.conf
, redémarrez MongoDB pour appliquer les nouvelles configurations :
# Sur Linux/macOS sudo systemctl restart mongod # Sur Windows (invite de commande en tant qu'administrateur) net stop MongoDB net start MongoDB
Utilisation de MongoDB Compass
MongoDB Compass est l'interface graphique officielle de MongoDB qui facilite la gestion, la visualisation, et l'analyse de données. Voici un guide pour vous aider à naviguer et utiliser MongoDB Compass efficacement.
Installation de MongoDB Compass
1. Téléchargez MongoDB Compass depuis le site officiel de MongoDB.
2. Installez l'application en suivant les instructions selon votre système d'exploitation (Windows, macOS, ou Linux).
3. Lancez MongoDB Compass après l'installation.
Connexion à MongoDB
1. Ouvrez MongoDB Compass et vous verrez un écran de connexion.
2. Si vous exécutez MongoDB localement, utilisez l'URI suivant pour vous connecter :
mongodb://localhost:27017
3. Cliquez sur "Connect" pour accéder à votre base de données locale.
Navigation et gestion des bases de données
Une fois connecté, MongoDB Compass vous permet de visualiser et gérer vos bases de données et collections :
- Créer une base de données : Cliquez sur "Create Database", nommez-la et ajoutez une première collection pour l’initialiser.
- Visualiser les données : Cliquez sur une collection pour afficher et explorer les documents.
- Rechercher dans les documents : Utilisez l'onglet "Filter" pour appliquer des filtres aux données (par exemple, rechercher des documents avec des critères spécifiques).
Requêtes et filtres
MongoDB Compass propose une interface intuitive pour exécuter des requêtes et filtrer des données :
- Filtrage : Dans l'onglet "Filter", entrez une requête en JSON pour afficher les documents correspondants. Exemple :
{ "age": { "$gt": 25 } }
- Tri : Utilisez l'onglet "Sort" pour trier les résultats par champ, par exemple par ordre alphabétique ou numérique.
- Projection : Dans l'onglet "Project", sélectionnez les champs à afficher, ce qui permet de masquer les champs inutiles pour la requête.
Analyser et visualiser les données
MongoDB Compass propose des outils d’analyse pour obtenir des statistiques rapides sur les données :
- Analyse des documents : Obtenez un aperçu des champs les plus courants et de leurs types de données.
- Histogrammes et graphiques : Visualisez des distributions de valeurs, utiles pour analyser les données d’une collection.
- Pipeline d'agrégation : Créez des agrégations en utilisant l’interface graphique pour explorer plus en profondeur les données sans écrire de code.
Supprimer des documents et collections
Pour supprimer des documents ou des collections, sélectionnez l'élément à supprimer et cliquez sur "Delete". MongoDB Compass permet de supprimer facilement des documents individuels ou des collections entières.
Sécuriser MongoDB Compass
Assurez-vous que votre connexion est sécurisée, surtout lors de connexions à distance. MongoDB Compass prend en charge les connexions SSL/TLS et l'authentification pour protéger vos données.
MongoDB Atlas (Cloud)
MongoDB Atlas est une plateforme de base de données MongoDB gérée dans le cloud. Elle permet de créer, déployer, et gérer des bases de données MongoDB sur des infrastructures cloud comme AWS, Azure, ou Google Cloud Platform. Voici comment démarrer avec MongoDB Atlas :
Créer un compte MongoDB Atlas
1. Rendez-vous sur le site officiel de MongoDB Atlas.
2. Cliquez sur "Start Free" pour créer un compte.
3. Suivez les instructions pour configurer votre compte MongoDB Atlas.
Créer un cluster MongoDB
Une fois inscrit, créez un cluster pour héberger vos données MongoDB :
- Dans le tableau de bord MongoDB Atlas, cliquez sur "Build a Cluster".
- Sélectionnez un fournisseur de cloud (AWS, Azure, ou Google Cloud), une région, et les options de cluster gratuites ou payantes.
- Cliquez sur "Create Cluster" et attendez quelques minutes que le cluster soit créé.
Configurer les identifiants et l'accès au réseau
Une fois votre cluster prêt, configurez les paramètres de sécurité :
- Créer un utilisateur : Dans le tableau de bord, allez dans "Database Access" et cliquez sur "Add New Database User". Définissez un nom d'utilisateur, un mot de passe sécurisé et les rôles d'accès.
- Configurer l'accès réseau : Accédez à "Network Access" et cliquez sur "Add IP Address". Vous pouvez autoriser votre adresse IP ou permettre l'accès depuis n'importe quelle IP en utilisant
0.0.0.0/0
(recommandé uniquement pour le développement).
Connexion à MongoDB Atlas
1. Cliquez sur "Connect" dans votre cluster pour obtenir l'URI de connexion.
2. Choisissez "Connect Your Application" pour obtenir un URI à utiliser dans votre code.
3. Copiez l'URI et remplacez <username>
et <password>
par vos identifiants de connexion. Par exemple :
mongodb+srv://: @cluster0.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
Surveillance et sauvegarde des données
MongoDB Atlas propose des outils pour surveiller et sauvegarder vos données :
- Surveillance : Accédez aux performances de votre cluster via l'onglet "Metrics", où vous pouvez observer l'utilisation de la CPU, les opérations de lecture/écriture, etc.
- Backups automatiques : Configurez des sauvegardes automatiques dans l'onglet "Backups" pour garantir la sécurité de vos données.
Sécuriser MongoDB Atlas
MongoDB Atlas propose plusieurs fonctionnalités de sécurité pour protéger vos données, telles que le chiffrement des données en transit et au repos, l'authentification multi-facteurs, et la gestion des accès basée sur les rôles. Assurez-vous de bien configurer ces options pour une protection optimale.
Création de Base de Données
Dans MongoDB, une base de données est automatiquement créée lorsqu'on insère des données dans une collection qui n'existe pas encore. Voici comment créer une base de données, que vous soyez dans l'interface en ligne de commande Mongo Shell, MongoDB Compass, ou MongoDB Atlas.
Utilisation du Mongo Shell
1. Lancez le Mongo Shell en tapant mongo
dans votre terminal.
2. Utilisez la commande suivante pour sélectionner ou créer une base de données :
use nom_de_ma_base_de_donnees
Si la base de données nom_de_ma_base_de_donnees
n'existe pas encore, MongoDB la créera lorsque vous insérerez des documents dans une collection.
Utilisation de MongoDB Compass
MongoDB Compass vous permet de créer une base de données via une interface graphique :
- Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
- Cliquez sur "Create Database" dans le tableau de bord.
- Entrez un nom pour la base de données et un nom pour la première collection.
- Cliquez sur "Create Database" pour valider.
Utilisation de MongoDB Atlas
Dans MongoDB Atlas, vous pouvez créer une base de données directement depuis le navigateur :
- Connectez-vous à votre cluster MongoDB Atlas et accédez à l'onglet "Collections".
- Cliquez sur "Add My Own Data" pour créer une nouvelle base de données.
- Entrez le nom de la base de données et de la collection initiale, puis cliquez sur "Create".
Vérifier la base de données
Pour confirmer la création de la base de données, utilisez la commande suivante dans le Mongo Shell :
show dbs
Votre nouvelle base de données apparaîtra dans la liste une fois qu'elle contiendra au moins une collection avec des données.
Suppression de Base de Données
Dans MongoDB, vous pouvez supprimer une base de données en utilisant le Mongo Shell, MongoDB Compass, ou MongoDB Atlas. Voici comment procéder.
Suppression via le Mongo Shell
1. Ouvrez le Mongo Shell en tapant mongo
dans votre terminal.
2. Sélectionnez la base de données que vous souhaitez supprimer :
use nom_de_ma_base_de_donnees
3. Utilisez la commande suivante pour supprimer la base de données :
db.dropDatabase()
MongoDB vous confirmera que la base de données a été supprimée avec succès.
Suppression via MongoDB Compass
1. Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
2. Sélectionnez la base de données que vous souhaitez supprimer dans la liste.
3. Cliquez sur l’icône de suppression () pour supprimer la base de données, puis confirmez l’action.
Suppression via MongoDB Atlas
1. Accédez à votre cluster MongoDB Atlas et allez dans l'onglet "Collections".
2. Sélectionnez la base de données que vous souhaitez supprimer.
3. Dans les options de la collection, cliquez sur "Drop Database", puis confirmez la suppression.
Lister les Bases de Données
MongoDB vous permet de lister toutes les bases de données présentes sur votre instance. Voici comment visualiser la liste des bases de données disponibles.
Liste des bases de données via le Mongo Shell
Dans le Mongo Shell, vous pouvez voir toutes les bases de données en exécutant la commande suivante :
show dbs
Cette commande affiche toutes les bases de données avec leur taille respective.
Liste des bases de données via MongoDB Compass
MongoDB Compass affiche automatiquement la liste des bases de données dans le tableau de bord dès que vous vous connectez à votre instance MongoDB. Cliquez sur une base de données pour explorer son contenu.
Liste des bases de données via MongoDB Atlas
Dans MongoDB Atlas, accédez à votre cluster et sélectionnez l'onglet "Collections". La liste des bases de données et collections apparaîtra, vous permettant d'explorer chaque base de données en détail.
Création de Collections
Une collection dans MongoDB est similaire à une table dans une base de données relationnelle. Les collections contiennent des documents, et elles sont créées automatiquement lorsque des documents y sont insérés pour la première fois. Voici comment créer une collection dans Mongo Shell, MongoDB Compass, et MongoDB Atlas.
Création via le Mongo Shell
Dans Mongo Shell, vous pouvez créer une collection en insérant un document dans une collection inexistante, ou en utilisant la commande createCollection
:
- 1. Créer en insérant un document : Cette méthode crée automatiquement la collection si elle n'existe pas encore.
use nom_de_ma_base_de_donnees db.ma_collection.insertOne({ "nom": "Alice", "age": 25 })
- 2. Utiliser
createCollection
: Vous pouvez aussi créer une collection explicitement :
db.createCollection("ma_collection")
Création via MongoDB Compass
MongoDB Compass offre une interface visuelle pour créer des collections :
- Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
- Sélectionnez la base de données où vous souhaitez ajouter la collection.
- Cliquez sur "Create Collection" et entrez le nom de la nouvelle collection.
- Cliquez sur "Create" pour finaliser.
Création via MongoDB Atlas
Dans MongoDB Atlas, les collections peuvent être créées directement depuis le navigateur :
- Accédez à votre cluster MongoDB Atlas et ouvrez l'onglet "Collections".
- Sélectionnez la base de données dans laquelle vous voulez créer une collection.
- Cliquez sur "Add My Own Data" si c'est la première collection, ou "Create Collection" pour en ajouter une nouvelle.
- Entrez le nom de la collection et cliquez sur "Create".
Vérification de la collection
Pour vérifier la création de la collection dans le Mongo Shell, utilisez la commande suivante :
show collections
La nouvelle collection apparaîtra dans la liste si elle a été créée avec succès.
Suppression de Collections
La suppression d'une collection dans MongoDB est une opération simple, mais définitive. Assurez-vous d'avoir sauvegardé les données si nécessaire avant de procéder.
Suppression via le Mongo Shell
Dans le Mongo Shell, vous pouvez supprimer une collection avec la commande drop
:
use nom_de_ma_base_de_donnees db.ma_collection.drop()
MongoDB affichera un message confirmant la suppression.
Suppression via MongoDB Compass
Dans MongoDB Compass :
- Connectez-vous à votre instance et sélectionnez la base de données contenant la collection à supprimer.
- Sélectionnez la collection et cliquez sur "Drop Collection".
- Confirmez la suppression dans la fenêtre de confirmation.
Suppression via MongoDB Atlas
Dans MongoDB Atlas :
- Accédez à votre cluster MongoDB Atlas, puis ouvrez l'onglet "Collections".
- Sélectionnez la base de données et la collection que vous souhaitez supprimer.
- Cliquez sur "Drop Collection" et confirmez l'action.
Gestion des Index
Les index améliorent les performances de recherche en permettant un accès plus rapide aux données. MongoDB prend en charge différents types d'index pour optimiser les requêtes.
Création d'Index via le Mongo Shell
Utilisez la méthode createIndex
pour créer un index sur un ou plusieurs champs :
db.ma_collection.createIndex({ "nom": 1 })
Dans cet exemple, un index est créé sur le champ nom
pour des recherches rapides par ordre croissant (1 signifie ascendant).
Gestion des Index via MongoDB Compass
MongoDB Compass offre une interface pour créer et gérer les index :
- Ouvrez MongoDB Compass, sélectionnez la collection souhaitée.
- Accédez à l'onglet "Indexes" et cliquez sur "Create Index".
- Choisissez le champ et le type d'index (ascendant ou descendant), puis cliquez sur "Create".
Types d'Index dans MongoDB
- Index unique : Assure que chaque valeur dans le champ est unique.
- Index de texte : Utilisé pour la recherche en texte intégral.
- Index géospatial : Permet les requêtes de données spatiales (ex. : localisation).
- Index composé : Indexe plusieurs champs pour optimiser les requêtes combinées.
Suppression d'Index
Vous pouvez supprimer un index en utilisant la commande suivante dans le Mongo Shell :
db.ma_collection.dropIndex("nom_1")
Remplacez nom_1
par le nom de l'index que vous souhaitez supprimer.
Insertion de Documents
Dans MongoDB, les données sont stockées sous forme de documents JSON. Vous pouvez insérer des documents dans une collection via le Mongo Shell, MongoDB Compass, ou MongoDB Atlas.
Insertion via le Mongo Shell
Utilisez la méthode insertOne
pour insérer un document, ou insertMany
pour plusieurs documents :
db.ma_collection.insertOne({ "nom": "Alice", "age": 25, "ville": "Paris" }) db.ma_collection.insertMany([ { "nom": "Bob", "age": 30, "ville": "Lyon" }, { "nom": "Charlie", "age": 35, "ville": "Marseille" } ])
Insertion via MongoDB Compass
1. Connectez-vous à MongoDB Compass et sélectionnez la collection.
2. Cliquez sur "Insert Document" et entrez le document au format JSON.
3. Cliquez sur "Insert" pour ajouter le document à la collection.
Mise à Jour de Documents
MongoDB propose plusieurs méthodes pour mettre à jour les documents dans une collection, notamment updateOne
pour un seul document et updateMany
pour plusieurs documents.
Mise à Jour via le Mongo Shell
Pour mettre à jour un document spécifique, utilisez $set
pour modifier les champs :
db.ma_collection.updateOne( { "nom": "Alice" }, { $set: { "ville": "Lille" } } ) db.ma_collection.updateMany( { "ville": "Lyon" }, { $set: { "age": 32 } } )
Suppression de Documents
Vous pouvez supprimer des documents dans MongoDB en utilisant les méthodes deleteOne
pour un seul document ou deleteMany
pour plusieurs documents.
Suppression via le Mongo Shell
Utilisez deleteOne
ou deleteMany
pour supprimer des documents :
db.ma_collection.deleteOne({ "nom": "Alice" }) db.ma_collection.deleteMany({ "ville": "Lyon" })
Recherche de Documents
MongoDB offre des méthodes de recherche puissantes, telles que find
et findOne
, pour localiser des documents spécifiques dans une collection.
Recherche via le Mongo Shell
Utilisez find
pour rechercher des documents qui correspondent à un critère :
db.ma_collection.find({ "ville": "Paris" }) db.ma_collection.find({ "age": { $gt: 25 } })
La méthode find
retourne tous les documents qui correspondent au critère donné.
Conception de Schéma
MongoDB est une base de données NoSQL sans schéma strict, mais il est recommandé de concevoir un schéma logique pour structurer efficacement les données et optimiser les performances.
Principes de Conception
- Modélisation selon les requêtes : Structurez les documents en fonction des requêtes les plus fréquentes.
- Imbrication vs Référence : Imbriquez les données lorsqu’elles sont fortement liées ; utilisez des références pour des relations plus lâches.
- Optimisation de la taille des documents : Évitez les documents trop volumineux pour réduire le temps de traitement.
- Utilisation des Index : Planifiez les champs qui nécessitent des index pour des recherches rapides.
Exemple de Schéma
Voici un exemple de schéma MongoDB pour une application de blog :
{ "_id": ObjectId("..."), "auteur": "John Doe", "titre": "Comment utiliser MongoDB", "contenu": "Introduction à MongoDB...", "tags": ["MongoDB", "NoSQL", "Base de Données"], "commentaires": [ { "utilisateur": "Alice", "commentaire": "Super article !" }, { "utilisateur": "Bob", "commentaire": "Merci pour les infos." } ], "date_creation": ISODate("2024-11-03T00:00:00Z") }
Requêtes MongoDB
MongoDB offre un langage de requêtes puissant pour extraire et manipuler des données. Les requêtes MongoDB utilisent une syntaxe JSON pour définir des critères et des opérations de recherche.
Exemples de Requêtes de Base
MongoDB permet d'utiliser plusieurs opérateurs pour filtrer les documents :
# Requête pour trouver les documents où "age" est supérieur à 25 db.ma_collection.find({ "age": { "$gt": 25 } }) # Requête pour trouver les documents où "ville" est soit "Paris" soit "Lyon" db.ma_collection.find({ "ville": { "$in": ["Paris", "Lyon"] } }) # Requête pour les documents où "nom" commence par "A" db.ma_collection.find({ "nom": { "$regex": "^A" } })
Aggregation Framework
Le Framework d'Agrégation de MongoDB permet de transformer et d'agréger des données pour créer des rapports et des analyses complexes. Il utilise des "pipelines" d'étapes pour traiter les données.
Exemple de Pipeline d'Agrégation
Voici un exemple de pipeline d'agrégation pour calculer l'âge moyen des utilisateurs par ville :
db.ma_collection.aggregate([ { $group: { "_id": "$ville", "age_moyen": { $avg: "$age" } } } ])
Cette requête groupe les documents par ville
et calcule l'âge moyen pour chaque groupe.
Étapes d'Agrégation
- $match : Filtrer les documents.
- $group : Grouper les documents et appliquer des opérations d'agrégation (ex :
$sum
,$avg
). - $sort : Trier les résultats.
- $project : Sélectionner les champs à afficher.
Recherche Textuelle
MongoDB supporte la recherche en texte intégral, permettant de rechercher des mots clés dans les champs texte des documents. Cette fonctionnalité utilise des index de texte.
Création d'un Index de Texte
Pour activer la recherche textuelle, créez un index de texte sur le champ souhaité :
db.ma_collection.createIndex({ "description": "text" })
Effectuer une Recherche Textuelle
Une fois l'index créé, utilisez $text
pour rechercher des mots clés :
db.ma_collection.find({ $text: { $search: "MongoDB" } })
Cette requête retourne tous les documents contenant le mot "MongoDB" dans le champ description
.
Requêtes Géospatiales
MongoDB prend en charge les requêtes géospatiales, qui permettent de stocker et de manipuler des données géographiques comme les emplacements et les coordonnées.
Création d'un Index Géospatial
Pour utiliser les requêtes géospatiales, créez un index géospatial sur le champ contenant les coordonnées :
db.ma_collection.createIndex({ "emplacement": "2dsphere" })
Exemple de Requête Géospatiale
Voici comment rechercher les documents situés dans un rayon de 5 km d'un emplacement spécifique :
db.ma_collection.find({ "emplacement": { $near: { $geometry: { type: "Point", coordinates: [48.8566, 2.3522] }, $maxDistance: 5000 } } })
Cette requête retourne les documents situés à moins de 5 km des coordonnées de Paris (48.8566, 2.3522).
Optimisation des Index
Les index permettent d'accélérer les requêtes en MongoDB, mais un index mal conçu peut ralentir les performances. Voici quelques bonnes pratiques pour optimiser les index.
Bonnes Pratiques pour les Index
- Limiter le nombre d'index : Évitez de créer des index sur chaque champ. Choisissez ceux utilisés fréquemment dans les requêtes.
- Utiliser les index composés : Créez des index composés lorsque les requêtes utilisent plusieurs champs (ex. :
{ "nom": 1, "age": 1 }
). - Index partiels : Utilisez des index partiels pour indexer uniquement une portion des documents, ce qui réduit l'espace de stockage.
Vérification de l'Efficacité des Index
Vous pouvez utiliser explain()
pour vérifier si les index sont utilisés efficacement par les requêtes.
db.ma_collection.find({ "nom": "Alice" }).explain("executionStats")
Le retour de executionStats
affiche si un index est utilisé pour la requête et fournit des statistiques d'exécution.
Ajustement de Performance
L'ajustement des performances est essentiel pour les bases de données volumineuses et les applications nécessitant des temps de réponse rapides. Voici quelques techniques pour améliorer les performances en MongoDB.
Techniques d'Ajustement
- Limitez la taille des documents : MongoDB est plus performant avec des documents de taille modérée (moins de 16 Mo).
- Utilisez le bon type de stockage : Sélectionnez WiredTiger pour les performances élevées et la compression des données.
- Optimisez les requêtes : Utilisez
$project
pour limiter les champs retournés et$match
pour filtrer dès le début d'un pipeline d'agrégation.
Surveillance des Performances
Surveillez régulièrement les performances de MongoDB pour identifier les goulots d'étranglement. Vous pouvez utiliser MongoDB Atlas pour accéder à des statistiques de performances en temps réel, ou utiliser la commande suivante dans le Mongo Shell pour les métriques de base :
db.serverStatus()
Profilage des Requêtes
Le profilage des requêtes vous aide à identifier les requêtes lentes et à analyser leur impact sur la performance. MongoDB propose un outil de profilage intégré pour surveiller les requêtes.
Activer le Profiling
Le profiler de MongoDB a trois niveaux :
- 0 : Désactivé (profiling inactif).
- 1 : Log les requêtes lentes (au-dessus d'un seuil défini).
- 2 : Log toutes les requêtes.
Pour activer le niveau 1 ou 2, utilisez :
db.setProfilingLevel(1, { slowms: 100 })
Ici, les requêtes supérieures à 100 ms seront loggées.
Afficher les Requêtes Profilées
Les requêtes profilées sont stockées dans la collection system.profile
de chaque base de données. Pour afficher les requêtes profilées :
db.system.profile.find().sort({ ts: -1 }).limit(5)
Cette commande retourne les 5 requêtes les plus récentes avec des informations détaillées sur le temps d'exécution et les index utilisés.
Authentification et Autorisation
Pour sécuriser MongoDB, il est essentiel de mettre en place l'authentification et l'autorisation. Cela permet de contrôler qui a accès aux données et quelles actions ils peuvent effectuer.
Activer l'Authentification
Pour activer l'authentification, modifiez le fichier de configuration mongod.conf
en ajoutant la ligne suivante :
security: authorization: "enabled"
Redémarrez MongoDB pour appliquer cette modification.
Création d'Utilisateurs
Après avoir activé l'authentification, créez un utilisateur avec des rôles spécifiques :
use admin db.createUser({ user: "adminUser", pwd: "votre_mot_de_passe", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
Les utilisateurs peuvent être assignés à des rôles spécifiques, comme read
ou readWrite
, pour restreindre leurs privilèges.
Sauvegarde et Restauration
Les sauvegardes sont essentielles pour éviter la perte de données. MongoDB offre des outils pour sauvegarder et restaurer les bases de données de manière fiable.
Sauvegarde avec mongodump
La commande mongodump
permet de sauvegarder une base de données en créant un fichier de dump :
mongodump --db nom_de_ma_base --out /chemin/vers/dossier_sauvegarde
Cette commande crée un dossier contenant des fichiers BSON pour chaque collection.
Restauration avec mongorestore
Pour restaurer une base de données, utilisez la commande mongorestore
en pointant vers le dossier de sauvegarde :
mongorestore --db nom_de_ma_base /chemin/vers/dossier_sauvegarde/nom_de_ma_base
Cette commande restaure toutes les collections de la base de données spécifiée.
Réplication et Haute Disponibilité
La réplication permet de dupliquer les données sur plusieurs serveurs, offrant une haute disponibilité et une tolérance aux pannes.
Configuration d'un Replica Set
Un replica set est un groupe de serveurs qui conserve les mêmes données, avec un nœud primaire et des nœuds secondaires. Voici les étapes de base pour configurer un replica set :
- Démarrez chaque instance MongoDB avec l'option
--replSet
:
mongod --replSet "nom_du_replica_set" --port 27017 --dbpath /chemin/vers/db1 mongod --replSet "nom_du_replica_set" --port 27018 --dbpath /chemin/vers/db2 mongod --replSet "nom_du_replica_set" --port 27019 --dbpath /chemin/vers/db3
- Connectez-vous à une instance et initialisez le replica set :
rs.initiate({ _id: "nom_du_replica_set", members: [ { _id: 0, host: "localhost:27017" }, { _id: 1, host: "localhost:27018" }, { _id: 2, host: "localhost:27019" } ] })
Le replica set est maintenant configuré avec un nœud primaire et deux secondaires.
Avantages de la Réplication
- Haute disponibilité : Les données sont disponibles même si un nœud tombe en panne.
- Lecture en répartition : Les nœuds secondaires peuvent servir aux requêtes en lecture pour répartir la charge.
- Protection des données : Les données sont dupliquées, réduisant le risque de perte.
Utilisation avec Mongoose
Mongoose est une bibliothèque Node.js populaire pour interagir avec MongoDB. Elle fournit une interface basée sur des schémas pour structurer les données et simplifie les opérations CRUD.
Installation de Mongoose
Installez Mongoose dans votre projet Node.js :
npm install mongoose
Connexion à MongoDB avec Mongoose
Une fois installé, utilisez Mongoose pour vous connecter à MongoDB :
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/ma_base', { useNewUrlParser: true, useUnifiedTopology: true }).then(() => console.log('Connexion réussie')) .catch((error) => console.error('Erreur de connexion:', error));
Définir un Schéma et un Modèle
Créez un schéma et un modèle pour structurer les données :
const utilisateurSchema = new mongoose.Schema({ nom: String, age: Number, ville: String }); const Utilisateur = mongoose.model('Utilisateur', utilisateurSchema);
Ce modèle permet de gérer les documents dans la collection utilisateurs
avec les propriétés définies.
MongoDB avec Node.js
Node.js offre une connexion native à MongoDB via le mongodb
client, permettant d'effectuer des opérations directement sur la base de données.
Installation du Client MongoDB
Installez le package mongodb
dans votre projet Node.js :
npm install mongodb
Connexion à MongoDB
Utilisez le client MongoDB pour vous connecter à votre base de données :
const { MongoClient } = require('mongodb'); const uri = 'mongodb://localhost:27017'; const client = new MongoClient(uri); async function run() { try { await client.connect(); console.log('Connexion réussie'); const db = client.db('ma_base'); const collection = db.collection('utilisateurs'); // Opérations avec la collection } finally { await client.close(); } } run().catch(console.error);
Pipelines de Données
Les pipelines de données en MongoDB permettent de traiter des flux de données en étapes séquentielles, ce qui est utile pour des transformations, des agrégations et des analyses complexes.
Création d'un Pipeline d'Agrégation
Voici un exemple de pipeline pour calculer le nombre d'utilisateurs par ville :
db.utilisateurs.aggregate([ { $group: { _id: "$ville", count: { $sum: 1 } } }, { $sort: { count: -1 } } ])
Ce pipeline groupe les utilisateurs par ville, compte le nombre de documents dans chaque groupe, et les trie par ordre décroissant.
Étapes Communes dans les Pipelines
- $match : Filtre les documents en amont.
- $group : Groupe les documents et applique des opérations d'agrégation.
- $sort : Trie les résultats.
- $lookup : Permet de joindre des collections.
Intégration avec Outils d'Analyse
MongoDB peut être intégré avec divers outils d'analyse pour fournir des insights avancés et générer des rapports.
Intégration avec Tableau
Tableau permet de se connecter à MongoDB via MongoDB Connector ou en important des données CSV générées :
- Exportez les données de MongoDB en CSV avec
mongoexport
. - Importez le fichier CSV dans Tableau pour la visualisation et l'analyse.
Intégration avec Apache Spark
MongoDB peut être intégré avec Apache Spark pour le traitement de données à grande échelle :
- Installez le
mongo-spark-connector
pour accéder aux données MongoDB depuis Spark. - Utilisez Spark pour effectuer des calculs distribués et des analyses avancées.