Aller au contenu

MongoDB : console (mongosh)

Le shell mongosh est la console de MongoDB : un interpréteur JavaScript connecté à la base. Les exemples utilisent la base boutique.

Fenêtre de terminal
mongosh # mongodb://127.0.0.1:27017
mongosh "mongodb://127.0.0.1:27017/boutique" # directement dans la base boutique
mongosh --host serveur.exemple.com --port 27017
mongosh "mongodb://app@serveur.exemple.com:27017/boutique?authSource=boutique" # mot de passe demandé
mongosh -u app --authenticationDatabase boutique boutique # idem, avec des options

Quand l’authentification est activée, -u seul fait demander le mot de passe de façon interactive : ne pas l’écrire dans la commande (-p motdepasse), il resterait dans l’historique et la liste des processus. Pour une connexion chiffrée : --tls.

Dans la console, des commandes d’aide s’écrivent sans parenthèses :

show dbs // liste les bases (alias : show databases)
use boutique // choisit la base (créée à la première écriture)
show collections // collections de la base courante
db // nom de la base courante
show users // utilisateurs de la base courante
show roles // rôles de la base courante
help // aide générale
exit // quitte (ou quit(), ou Ctrl+d)
cls // efface l'écran

Le reste est du JavaScript : db désigne la base courante et db.clients la collection clients.

db.getName(); // nom de la base
db.version(); // version du serveur
db.stats(); // statistiques de la base
db.clients.countDocuments(); // nombre de documents
db.clients.find().limit(2); // 2 premiers documents
db.help(); // méthodes de la base
db.clients.help(); // méthodes d'une collection

find() affiche 20 documents à la fois. Taper it pour afficher la suite.

config.set('displayBatchSize', 50); // 50 documents par page
Fenêtre de terminal
mongosh --quiet --eval 'db.runCommand({ ping: 1 })'
mongosh --quiet boutique --eval 'db.clients.countDocuments()'
mongosh --quiet boutique --file script.js
mongosh --quiet boutique --eval 'printjson(db.clients.find({}, { nom: 1, _id: 0 }).toArray())' > clients.json
Option Rôle
--quiet Supprime les messages de bienvenue (utile dans un script)
--eval 'code' Exécute du JavaScript
--file script.js Exécute un fichier
--norc Ignore .mongoshrc.js
--nodb Démarre sans connexion (calculs, tests)
--tls Connexion chiffrée

Un fichier de script, script.js :

const total = db.clients.countDocuments();
print(`Nombre de clients : ${total}`);
db.clients
.find({ ville: 'Lyon' }, { nom: 1, _id: 0 })
.forEach((client) => print(client.nom));

Dans la console, load("script.js") exécute un fichier.

db.clients.find().pretty(); // mise en forme (déjà appliquée par défaut dans mongosh)
db.clients.find({}, { nom: 1, ville: 1, _id: 0 }); // projection : colonnes choisies
printjson(db.clients.findOne()); // JSON complet
config.set('inspectDepth', 6); // profondeur d'affichage des objets imbriqués

La commande .editor ouvre un mode de saisie multiligne (terminer par Ctrl+d) ; edit (ou edit nomDeVariable) ouvre l’éditeur défini par config.set("editor", "nano").

Exécuté à chaque ouverture de mongosh :

config.set('displayBatchSize', 50);
config.set('inspectDepth', 6);

L’historique des commandes est enregistré dans ~/.mongodb/mongosh/mongosh_repl_history. Les commandes contenant password, pwd et d’autres mots sensibles ne sont pas conservées.

Symptôme Piste
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017 Service arrêté (sudo systemctl status mongod) ou mauvais port
MongoServerError: Authentication failed Mauvais mot de passe, ou mauvaise base d’authentification (authSource)
MongoServerError: command … requires authentication L’authentification est activée : se connecter avec -u
show dbs ne liste pas la base Une base n’existe qu’après la première écriture dans une collection