MongoDB – le shell mongo

la commande mongo sert à manipuler MongoDB. C’est un shell s’appuyant sur un moteur javascript, et va donc nous permettre d’utiliser toutes les fonctions standard du javascript (hors fonctions graphiques) en plus des commande de base de donnée qui n’utilisent pas la syntaxe javascript ( use, show etc…) . il est possible d’utiliser ses porpres bibliothèques ( ce n’est pas négligeable quand on veut utiliser des frameworks ou server d’application basés sur javascript. je vous cite  NodeJS pour l’exemple )

pour la suite de ce tuto, on suppose que MongoDB est installé sur votre système, le server mongod démarré, et les binaires mongo visibles dans le PATH ( voici un lien si MongoDB n’est pas installé )

Connection au serveur mongod:

dans un terminal il suffit de taper mongo.

mongo
MongoDB shell version: 2.2.0-rc1
connecting to: test
>

par défaut mongo se connect à un serveur local (localhost) et sur le port par défaut (27017). Pour ce connecter à une DB distante et/ou un port différent on ajoutera les paramètres –port et –host à la suite de la commande mongo

mongo --port 9087 --host myhost.local
MongoDB shell version: 2.2.0-rc1
connecting to: test
>

Choisir une base de donnée :

quand on se connect à MongoDB, la base de donnée ‘test’ est séléctionnée par défaut.

il convient d’utiliser une base de donnée par application/domaine applicatif ou autre domaine logique, pour les raisons que, normalement, vous connaissez déjà.

pour connaitre la DB courante, on utilise la commande db :

> db
test

pour connaitre les DB existantes (gérées pas le server mongod sur lequel on est connecté )

> show dbs
admin (empty)
local (empty)

choisir une DB (on peut choisir une DB qui n’existe pas )

> use mydb
switched to db mydb

Si la base de donnée n’existe pas, celle-ci sera créée au moment de l’insertion de données ou à la création manuelle d’une collection vide à dans celle-ci.

Manipulation de documents dans une collection :

les données sont représenté, dans MongoDB, sous forme de documents physiquement stockés en BSON. ce format est une représentation plus riche des donnés par rapport au JSON ou XML dans le fait que BSON apporte le support de type non gérés ou mal géré en JSON/XML : byte, int32, int64, double, ObjectID, Timestamp, Date , tableaux, etc… ( voir bsonspec.org )

voici les commandes CRUD de base ( CREATE, READ, UPDATE, DELETE ) :

  • insert()
  • find() et findOne
  • update()
  • remove()
  • save()   // crée un nouveau document ou met à jour un document existant
la syntaxe la plus courante est la suivante ( avec find() pour l’exemple ) :
db.<collection>.find()   //on remplace  bien entendu !!!

mais on peut utiliser la syntaxe suivante aussi ( par exemple si il y a des espaces dans le nom de la collection ou que le nom commence par un chiffre ) :

db["0blog"].find()                    // méthode 1

db.getCollection("mon blog").find()   // méthode 2

Quand on insère des donnée (sous forme de document) dans une collection inexistante,  MongoDB crée la collection implicitement, éventuellement si on a indiquer qu’on utilise une DB innexistante ( use maNouvelleBase ), celle-ci sera créée aussi implicitement

dans notre exemple nous créons des documents correspondants à des articles de blog que nous insérons dans la collection “articles” de la base de donnée “blog” :

> db          // on vérifie sur quelle DB on travail
test
>
> use blog    // comme on est pas sur la bonne, on change de DB
switched to db blog
>
> db
blog         // resultat !!
>

nous créons un objet JSON qui sera inséré comme document dans la collection ‘articles’

>
> var note1 = {      // on crée un document simple sous format json
    'title' : "le titre de mon premier post",
    'content' : "contenu du premier post, ...",
    'tags' : [ 'web' , 'dev', ]
    }
>
>   // on ajoute le document note1 dans la collection articles
> db.articles.insert( note1 )
>
> db.articles.findOne() // findOne retourne un seul document
{
	'_id' : ObjectId('50d7423224e20473b53cae72'),
	'title' : 'le titre de mon premier post',
	'content' : 'contenu du premier post, ...',
	'tags' : [
		'web',
		'dev'
	]
}

nous venons d’insérer un document dans une collection inexistante. elle sera donc implicitement créée pas MongoDB. nous récupérons le seul document présent dans la collection en utilisant la fonction findOne() sans paramètres (on n’a pas donné de critères en paramètre, la fonction renvoie le premier document trouvé).
nous pouvons lister les collections existantes comme ceci :

> show collections
articles
system.indexes

le shell nous retourne la liste des collections. ( la collection ‘articles’ a été créé ).

précédemment nous avons passé un objet en paramètre de la fonction find(). nous pouvons lui donner un document JSON directement comme ceci :

db.articles.insert({
    'title' : 'un autre article',
    'content' : 'contenu du post'
})

pour lister les documents présents dans la collection ‘articles’ ,on utilise la fonction find() en lui passant en paramètre des critères de recherche sous forme de document. si nous ne fournissons pas de paramètres, MongoDB nous retournera tous les documents ( il remplace le vide par le document {} . find() <=> find({})  )

> db.articles.find()
{ '_id' : ObjectId('50d7423224e20473b53cae72'), 'title' : 'le titre de mon premier post', 'content' : 'contenu du premier post, ...', 'tags' : [ 'web', 'dev' ] }
{ '_id' : ObjectId('50d7685924e20473b53cae73'), 'title' : 'un autre article', 'content' : 'contenu du post' }
>

on peut formatter le résultat en ajoutant .pretty() à la suite de find :

> db.articles.find().pretty()
{
	"_id" : ObjectId("50d7423224e20473b53cae72"),
	"title" : "le titre de mon premier post",
	"content" : "contenu du premier post, ...",
	"tags" : [
		"web",
		"dev"
	]
}
{
	"_id" : ObjectId("50d7685924e20473b53cae73"),
	"title" : "un autre article",
	"content" : "contenu du post"
}
>

Quelques commandes utiles :

  • help                                       afficher l’aide
  • help misc                              des fonctions utiles
  • db.help()                                afficher l’aide relative aux méthodes DB
  • db.<collection>.help()            aide applicables aux méthodes de collections
  • db.<collection>.find().help()    aide relative aux curseurs
  • show dbs                              affichage des DB
  • use <DB>                             connection à une DB
  • show collections                   affiche les collections dans la DB actuelle
  • show users                           affiche les utilisateur de la DB actuelle
  • Object.bsonsize(<document>)   renvoie la taille d’un document
  • printjson(<obj>)      met en forme JSON un objet : var obj = db.blog.findOne()
  • db.test.re<TAB>                  la toucha TAB sert à l’autocomplétion
  • Ctrl+a                        les touches Control+A servent à aller en début de ligne
  • Ctrl+e                        les touches Control+E servent à aller en fin de ligne
  • Ctrl+k                        pour effacer le reste de la ligne depuis le curseur
  • Ctrl+u                        pour effacer le debut de la ligne depuis le curseur
  • Ctrl+w                        pour effacer le mot précédant le curseur
  • ( d’autre raccourcis existent mais ne sont pas pris en compte par tous le terminaux, à vous de les découvrir )
Customisation du prompt du shell :
>
> var host = db.serverStatus().host;
> var prompt = function() { return db+"@"+host+" > "; }
blog@sd-unix >
blog@sd-unix > use test
switched to db test
test@sd-unix >

Dans le prochain article nous attaquons l’utilisation de MongoDB via PHP ainsi que les opération CRUD plus riches.

Did you like this? Share it:

Comments are closed.

Open Close