Easy-Micro

ESPACEMEMBRE Not Only SQL
Mongo Shell

Gestion du serveur NoSQL MongoDB

Formation NoSQL MongoDB par Easy-Micro Ouverture du Mongo Shell

Le Mongo Shell est une interface en ligne de commande qui permet de réaliser toutes les opérations sur vos bases de données MongoDB (un max de 4095 caractères par ligne de commande)

Pour ouvrir le Mongo Shell, soit vous allez directement double cliquer sur le fichier mongo.exe qui ce trouve probablement dans C:\Program Files\MongoDB\Server\4.4\bin, soit vous passez par l'invite de commande Windows (CMD), soit vous utilisez la fenêtre Shell visible en bas de l'interface graphique MongoDB Compass

Ouverture de la fenêtre Mongo Shell via l'invite de commande Windows
  1. On ouvre l'invite de commande Windows (Démarrer/CMD)
  2. Dans l'invite on fait un Change Directory vers le fichier exécutable Mongo Shell mongo.exe (pour moi : C:\Program Files\MongoDB\Server\4.4\bin)
    C:\Users\yo> cd C:\Program Files\MongoDB\Server\4.4\bin

A ce niveau, deux options; soit vous lancez le Shell local, soit vous lancez le Shell distant (MongoDB Atlas)

  • Lancer le shell local (avec l'instruction mongo)
    C:\Program Files\MongoDB\Server\4.4\bin> mongo
  • Lancer le shell distant MongoDB Atlas (avec la ligne de connexion)
    C:\Program Files\MongoDB\Server\4.4\bin> mongodb+srv://<nom d'utilisateur>:<mot de passe>@cluster0.tumbv.mongodb.net/test
    Nom d'utilisateur et mot de passe à renseigner. test correspond au nom de la base de donnée

Formation NoSQL MongoDB par Easy-Micro Travailler avec le Mongo Shell

Gestion des bases de données

L'instruction db pour connaitre la base de donnée sur laquelle vous vous trouvez et bien sûr, use <database> pour ce connecter à une autre base. L'instruction show dbs pour lister les bases de données

Connexion à une base et ajout de donnée dans une collection
> use myNewDatabase
> db.myCollection.insertOne( { x: 1 } );
Si la base "myNewDatabase" et la collection "myCollection" n'existe pas, elles sont créées avec la méthode insertOne()
Afficher la collection d'une base (Le Read des CRUD Operations)
> use sample_airbnb
> db.listingsAndReviews.find().pretty()
Connexion à la base sample_airbnb et affichage de la collection listingsAndReviews. Le pretty permet d'afficher la collection avec des retour à la ligne (sinon, illisible)

Plus d'infos sur le Manual Mongo

Formation NoSQL MongoDB par Easy-Micro Astuces Shell

  • Historique
    Utilisez les flèches de direction du clavier pour afficher l'historique de vos commandes
  • Autocomplétions
    Utilisez la touche clavier Tab pour l'autocomplétions de commande
  • Autres raccourcis
    Voir la liste des raccourcis sur Manual MongoDB

Formation NoSQL MongoDB par Easy-Micro Insérer des documents depuis le Shell

En NoSQL, un document d'une collection correspond à un enregistrement d'une table en relationnel

On utilise soit insertOne(), soit insertMany() - Le Create des CRUD Operations
> use ma_db
> db.macollection.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
macollection est le nom de la collection. Un insertOne() n'aurait pas eu besoin des crochets [].
Soit on utilise save()
> use ma_db
db.macollection.save ({
  "cours" : "NoSQL",
  "chapitres" : ["familles", "CAP", "sharding", "choix"],
  "auteur" : {
     "nom" : "Travers",
     "prenom" : "Nicolas"
  }
})
MongoDB ne gère aucun schéma pour les collections. Donc pas de structure fixe, ni de typage. Du coup, il est difficile lors de l'interrogation de connaître le contenu de la base de données.

Formation NoSQL MongoDB par Easy-Micro Importer des data depuis l'invite de commande

Pour importer des fichiers Json Open Data récupérés sur Data.gouv.fr (comme le fait CovidTraker), on utilise mongoimport depuis l'invite de commande Windows (mais pas depuis le Shell Mongo).

Cet utilitaire en ligne de commande fait parti des outils de commande de MongoDB qu'il faut télécharger ici : MongoDB Database Tools. MongoDB Database Tools contient 7 exécutables : mongodump (export en binaire), mongoexport, mongofiles (gestion des fichiers gridfs : qui dépassent la taille de 16 Mo), mongoimport, mongorestore, mongostat et mongotop (visuel du temp de lecture et d'écriture)

Préparation à l'import

Pour utiliser mongoimport depuis l'invite de commande Windows, faites un cd vers le dossier des utilitaires MongoDB que vous avez téléchargés
C:\Users\yo> cd C:\Program Files\MongoDB\Tools\100\bin
Sinon, vous pouvez créer une variable d'environnement Windows pour spécifier cette adresse (Raccourcis Win + pause)
Vérifier ensuite si vous avez bien mongoimport
C:\Program Files\MongoDB\Tools\100\bin> mongoimport --version
Cela vous affiche la version de mongoexport et prouve qui est bien là. ⚠ Cette commande est à utiliser depuis une invite de commande Windows mais pas depuis le Shell Mongo

Importer vos data soit en local, soit sur un serveur distant

Faites votre import en local (localhost)
C:\Program Files\MongoDB\Tools\100\bin> mongoimport --db ma_db --collection restaurants --file C:/data/db/restaurants.json
L'invite doit vous afficher : connected to: mongodb://localhost/ - 25357 document(s) imported successfully
Faites votre import sur le serveur distant (MongoDB Atlas)
C:\Program Files\MongoDB\Tools\100\bin> mongoimport --uri mongodb+srv://<USER>:<PASS>@cluster0.tumbv.mongodb.net/ma_db --collection restaurants --file C:/data/db/restaurants.json
USER et PASS sont à renseigner - L'invite doit vous afficher la progression de l'import puis 25357 document(s) imported successfully

Formation NoSQL MongoDB par Easy-Micro Afficher un jeux de données depuis le Shell

Connexion à une base et affichage d'un document
> use ma_db
> db.restaurants.findOne()
La fonction findOne() permet d'afficher le premier document
Filtrage à partir de "clés/valeurs"
db.restaurants.find( { "borough" : "Brooklyn" } )
Affiche tous les restaurants dans le quartier (borough) de Brooklyn, soit 6 085 restaurants!
Pour compter, il suffit d’ajouter la fonction “count"
db.restaurants.find( { "borough" : "Brooklyn" } ).count()
Nous utilisons du Javascript!
Recherche parmi les restaurants de Brooklyn ceux qui font de la cuisine italienne et présents sur la 5° Avenue avec le mot "pizza" dans le nom du restaurant
db.restaurants.find(
    { "borough" : "Brooklyn",
      "cuisine" : "Italian",
      "address.street" : "5 Avenue",
      "name" : /pizza/i }
)
La clé "street" est imbriquée dans l'adresse, donc syntaxe à point. Pour pizza on utilise les expressions régulières avec "/xxx/i" (le i pour "Insensible à la casse"). Résultat : 2 restaurants

Projection

db.getCollection('restaurants').find(
    {"borough":"Brooklyn",
     "cuisine":"Italian",
     "name":/pizza/i,
     "address.street" : "5 Avenue"},
    {"name":1, "_id":0}
)
Une projection permet de ne garder dans le résultat que le nom. On utilise le deuxième paramètre (optionnel) de la fonction find qui permet de choisir les clés à retourner dans le résultat.

➔ Plus d'infos sur OpenClassRoom avec Aggregate et Update (opérations $set et $unset)

Filtre dans MongoDB Atlas
Utilisation du filtre dans l'interface de MongoDB Atlas

Formation NoSQL MongoDB par Easy-Micro Afficher un jeux de données Open Data


Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]