TP 1 : Modélisation des données de BDD NoSQL avec MongoDB :
Création et manipulation de base
Ce premier sujet de TP va aborder la modélisation et la conception
des données avec MongoDB. Bien évidemment, il existe différents outils côté client qui se reposent sur le GUI (MongoDB Compass, Studio 3T, Robo 3T, NoSQLBooster …) mais dans ce module on va s’intéresser plus particulièrement à Mongo Shell. Pensez à consulter la liste des références mises à la fin du document. I. Téléchargement, installation et mise en place 1. Télécharger et installer MongoDB Community server (serveur) : a. https://www.mongodb.com/try/download/community 2. Modifier les variable d’environnement système PATH en ajoutant : C:\Program Files\MongoDB\Server\6.0\bin 3. Créer un répertoire sous la racine pour stocker vos BD C:\data\db 4. Lancer le serveur avec la commande mongod sur l’invite de commande 5. Télécharger et installer Mongo Shell (client): 6. https://www.mongodb.com/try/download/shell 7. Extraire les fichiers à partir de l’archive dans la racine 8. Modifier les variable d’environnement système PATH en ajoutant : C:\mongosh-1.5.4-win32-x64\bin 9. Lancer le serveur avec la commande mongosh sur une nouvelle invite de commande
II. Quelques commandes basiques à retenir : (testez les
commandes de tous les exemples ci-dessous !)
▪ mongod : démarrer le serveur
▪ mongosh ou encore mongosh –shell : démarrer une connexion client (démarrer le shell javascript) ▪ mongosh –version : savoir la version du mongo Shell ▪ show dbs : afficher la liste des BDD existantes. Il existe deux bases de données admin et local. Si on ne se connecte pas à une base de données, on travaille (par defaut) dans une base de données appelée test.
▪ use db : pour créer une BD nommée db. Si la base de données
n’existe pas, elle sera créée. Si elle existe déjà, vous serez redirigé vers la BD db. ▪ db.createCollection(‘col’) : créer une collection col dans la BD db directement. ▪ db.col.insert({nom: "Wick", prenom: "john"}) pour insérer un document dans la collection col ▪ show collections : afficher liste des collections de la BD. ▪ db.col.drop() : supprimer la collection ▪ db.dropDatabase() : supprimer une BD ▪ db.help() : Lister les commandes possibles sur les BDD III. Requêtes CRUD 1. Insertion des données : Create L’insertion de données dans votre base de données MongoDB se fait avec une des méthodes suivantes : ▪ insertOne() : La méthode insertOne va simplement insérer un nouveau document sans faire attention à ce qui existe déjà dans la base. db.col.insert({“champ1” : “val1” , “champ2” : “val2”, … }) ▪ insertMany() : insérer plusieurs documents en une opération db.col.insertMany( [ {clé1 : ’val1’, clé2 : ’val2’ ...} , {cléN : ’valN’, cléM : ’valM’... }] ) Note : il existe également la mongodb query insert qui peut insérer un ou plusieurs documents dans la collection. 2. Lecture/Recherche des données : Read ▪ db.col.find() : afficher/récupérer tous les documents de la collection (équivalent à la cmd Select en SQL) ▪ Rechercher selon des critères : db.personne.find({nom: "bob" ... }) ▪ Afficher seulement le premier document : db.col.findOne() ▪ Afficher le résultat au format JSON : db.col.find().pretty(); ▪ Et si on veut seulement afficher quelques champs : db.personne.find({},{nom:1}) ; càd affiche les noms de toutes les personnes ainsi que leurs identifiants (qui sera affiché automatiquement) ▪ Et si on ne veut pas afficher les _id : db.personne.find({},{nom:1, id: 0 }) ▪ Appeler une fonction pour chaque document de la sélection : db.personne.find().forEach( function(perso){ print(perso.nom +" "+ perso.prenom); }); Explication : Pour chaque document de la sélection (forEach), on appelle une fonction qui affiche le nom et le prénom.
➢ Utilisation des expressions régulières :
▪ Ex1 : chercher les personnes dont le nom commence par w : db.personne.find({name: /^w/ }) Les deux / pour indiquer le début et la fin de l’expression régulière ^ pour indiquer par quoi commence le mot cherché ▪ Ex 2 : Chercher les personnes dont le nom se termine par k : db.personne.find({name:/k$/ }) ▪ Ex 3 : chercher les personnes dont le nom commence par e ou par h : db.personne.find({name:/^[eh]/}) ▪ Ex : db.col.find().count() : nombre de documents dans la collection ▪ Trier le résultat de recherche dans l’ordre croissant : db.personne.find().sort({name: 1}) ▪ Trier le résultat de recherche dans l’ordre décroissant db.personne.find().sort({name: -1})
3. Modification des données : Update
▪ db.col.update() : prend en premier paramètre la requête discriminante pour trouver le premier document correspondant aux critères. En second paramètre, on retrouvera le ou les opérateurs de modifications (le type de modification à effectuer). ▪ db.col.update({ clé1 :’val1’,...}, {$set : {clén: ‘valn’}}) Types de modifications (opérations de update) : ▪ $set : modifier la valeur d’un champ ▪ $unset : supprimer un champ ▪ $rename : renommer un champ ▪ $inc : pour incrémenter la valeur d’un champ ▪ $mul : pour multiplier l’ancienne valeur d’un champ par la valeur spécifiée ▪ $min : pour modifier la valeur d’un champ si elle est supérieure à la valeur spécifiée par min (et inversement pour max) Autres méthodes de mise à jour : ▪ updateOne() : pour modifier le premier enregistrement de la sélection (par défaut) ▪ updateMany() : pour modifier toute la sélection Exemple 1: db.personne.update({nom: "bob"}, {$set:{ville:’Marseille’}}) Explication : On commence par sélectionner les documents dont le champ nom contient comme valeur bob. Si on n’utilise pas updateMany, seul le premier document de la collection personne sera concernée par la modification. Pour ce document, on mettra la valeur Marseille pour le champ ville s’il existe. Sinon, le champ ville sera créé avec la valeur Marseille. Exemple 2 : db.personne.update({nom: "bob"}, {$inc: {age:20}}) Explication : On commence par sélectionner les documents dont le champ nom contient comme valeur bob. Si on ne précise aucun critère de sélection, le premier document de la collection personne sera concerné par la modification. Pour ce(s) document(s), on incrémente de 20 l'âge pour s’il existe. Sinon, le champ age sera créé avec la valeur 20. Exemple 3 :db.personne.update({nom: "bob"}, {$inc:{age:20}, $unset:{prenom:1}}) Explication : Avec cette requête, on incrémente l'âge et on supprime le champ prenom pour le premier document ayant un champ nom qui a comme valeur bob Exemple 4 : db.personne.updateMany( {}, {$rename: { nom: ’name’ }} ) Explication : On commence par sélectionner tous les documents Pour ces documents, le champ nom sera renommé name.
4. Suppression des données : Delete
▪ db.posts.deleteOne ({ category: "technology", status: "published" }) ▪ Pour effacer toute une collection : db.posts.deleteMany({}) ▪ Effacer uniquement les documents suivant certains critères : db.posts.deleteMany({ tags : "technology" }) ▪ On peut également utiliser : remove () Ex : db.personne.remove({nom: "bob"}) On commence par sélectionner les documents dont le champ nom contient comme valeur bob. Ensuite tous ces documents seront supprimés.
Un Compte-Rendu CR (document pdf, nom-prenom.pdf) à rendre à
la fin de la séance. Mettez les extraits de vos requêtes et codes MongoDB (captures d’écrans) avec une explication sur vos codes, Vous ne rendrez que votre CR (pas de fichiers de code en plus) Envoyez votre CR par à : malika.elbaz.int@groupe-gema.com
Références à consulter : 1. Documentation officielle de MongoDB : https://www.mongodb.com/docs/manual/tutorial/getting-started/
Secrets du Marketing des Médias Sociaux 2021: Conseils et Stratégies Extrêmement Efficaces votre Facebook (Stimulez votre Engagement et Gagnez des Clients Fidèles)
L'analyse fondamentale facile à apprendre: Le guide d'introduction aux techniques et stratégies d'analyse fondamentale pour anticiper les événements qui font bouger les marchés
L'analyse technique facile à apprendre: Comment construire et interpréter des graphiques d'analyse technique pour améliorer votre activité de trading en ligne.
Le trading des bandes de bollinger facile à apprendre: Comment apprendre à utiliser les bandes de bollinger pour faire du commerce en ligne avec succès
La communication professionnelle facile à apprendre: Le guide pratique de la communication professionnelle et des meilleures stratégies de communication d'entreprise
Apprendre Python rapidement: Le guide du débutant pour apprendre tout ce que vous devez savoir sur Python, même si vous êtes nouveau dans la programmation