MongoDB : console (mongosh)
Le shell mongosh est la console de MongoDB : un interpréteur JavaScript connecté à la base. Les exemples utilisent la base boutique.
Se connecter
Section intitulée « Se connecter »mongosh # mongodb://127.0.0.1:27017mongosh "mongodb://127.0.0.1:27017/boutique" # directement dans la base boutiquemongosh --host serveur.exemple.com --port 27017mongosh "mongodb://app@serveur.exemple.com:27017/boutique?authSource=boutique" # mot de passe demandémongosh -u app --authenticationDatabase boutique boutique # idem, avec des optionsQuand 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.
Commandes de base
Section intitulée « Commandes de base »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 courantedb // nom de la base couranteshow users // utilisateurs de la base couranteshow roles // rôles de la base courantehelp // aide généraleexit // quitte (ou quit(), ou Ctrl+d)cls // efface l'écranLe reste est du JavaScript : db désigne la base courante et db.clients la collection clients.
db.getName(); // nom de la basedb.version(); // version du serveurdb.stats(); // statistiques de la basedb.clients.countDocuments(); // nombre de documentsdb.clients.find().limit(2); // 2 premiers documentsdb.help(); // méthodes de la basedb.clients.help(); // méthodes d'une collectionLe curseur : it
Section intitulée « Le curseur : it »find() affiche 20 documents à la fois. Taper it pour afficher la suite.
config.set('displayBatchSize', 50); // 50 documents par pageExécuter du JavaScript sans ouvrir la console
Section intitulée « Exécuter du JavaScript sans ouvrir la console »mongosh --quiet --eval 'db.runCommand({ ping: 1 })'mongosh --quiet boutique --eval 'db.clients.countDocuments()'mongosh --quiet boutique --file script.jsmongosh --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.
Affichage
Section intitulée « Affichage »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 choisiesprintjson(db.clients.findOne()); // JSON completconfig.set('inspectDepth', 6); // profondeur d'affichage des objets imbriquésLa 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").
Fichier de démarrage ~/.mongoshrc.js
Section intitulée « Fichier de démarrage ~/.mongoshrc.js »Exécuté à chaque ouverture de mongosh :
config.set('displayBatchSize', 50);config.set('inspectDepth', 6);Historique
Section intitulée « Historique »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.
Dépannage
Section intitulée « Dépannage »| 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 |
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel : mongosh