Skip to content

Première prise en main de MongoDB

Posted in NoSQL

MongoDB est une base documentaire sous licence libre (GNU AGPL). Cette base ne nécessite pas de schéma prédéfini des données (pas de MLD ou de trucs comme ça). C’est une base qui fait partie de la mouvance NoSQL.

1) Installation de MongoDB sous Debian :
root@pyrbur:/home/bouba# aptitude install mongodb-clients mongodb-server

On peut vérifier que le serveur tourne :
root@pyrbur:/home/bouba# /etc/init.d/mongodb status
[ ok ] Checking status of database: mongodb running.

On teste la connexion à la BD :
root@pyrbur:/home/bouba# mongo
MongoDB shell version: 2.0.6
connecting to: test
>

2) Manipulation des données (manip de base) :
Créer une collection : Nous souhaitons créer une collection “livres” dans la base “mabase”.
> use mabase
switched to db mabase
> db.createCollection('livres')
{ "ok" : 1 }
>

On ajoute ensuite un livre :
> db.livres.insert({titre:"Un beau titre", auteur:"un bel auteur"})
On affiche le contenu de la collection > db.livres.find()
{ "_id" : ObjectId("543ad7041ad70e81a1cf80b9"), "titre" : "Un beau titre", "auteur" : "un bel auteur" }

On peut aussi créer directement une nouvelle collection en faisant un insert ou un save :
> vehicule=({type:'Voiture', marque:"Peugeot"})
{ "type" : "Voiture", "marque" : "Peugeot" }
> db.vehicules.save(vehicule)
> show collections
livres
system.indexes
vehicules

Remarque : Pour avoir une aide sur les commandes on peut appeler la méthode help
>db.help()
>db.vehicules.help()

3) Premiers éléments d’Administration :

L’idée c’est de lancer une nouvelle instance MongoDB. Dans un prochain article nous verrons le Replica set puis aussi le sharding.
C’est parti. On va déjà éviter de se connecter en root. En regardant le fichier /etc/passwd on peut remarquer la création d’un compte mongodb.
On va modifier ce fichier pour donner un shell à mongodb. Puis on va lui attribuer un mot de passe :

mongodb:x:122:65534::/home/mongodb:/bin/bash
root@pyrbur:/var/lib/mongodb# passwd mongodb
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
root@pyrbur:/var/lib/mongodb#

On crée le home du user mongodb et on donne les bons droits :
root@pyrbur:/var/lib/mongodb# mkdir /home/mongodb
root@pyrbur:/var/lib/mongodb# chown -R mongodb:mongodb /home/mongodb
root@pyrbur:/var/lib/mongodb# su mongodb
mongodb@pyrbur:/var/lib/mongodb$ cd
mongodb@pyrbur:~$ pwd
/home/mongodb
mongodb@pyrbur:~$

Nous allons maintenant créer une nouvelle instance mongodb. Pour cela il va falloir à minima donner un chemin pour dire où l’on va stocker les données, un chemin vers les logs et un port d’écoute (l’instance par défaut écoute sur le 27017) : 1) On crée les répertoires qui vont accueillir les données et les logs
2) On lance l'instance
mongodb@pyrbur:~$ mkdir inst01
mongodb@pyrbur:~$ mkdir inst01/log
mongodb@pyrbur:~$ mongod --dbpath=/home/mongodb/inst01/ --port=27020 --logfile=/home/mongodb/inst01/log/server-27020.log --fork

On peut vérifier que le process tourne bien :
root@pyrbur:/var/lib/mongodb# ps -ef | grep mongodb
mongodb 385 1 0 22:50 ? 00:00:00 mongod --dbpath=/home/mongodb/inst01/ --port=27020 --logpath=/home/mongodb/inst01/log/server-27020.log --fork

et que l’instance écoute bien :
root@pyrbur:/var/lib/mongodb# netstat -taupe | grep mongo
tcp 0 0 *:27020 *:* LISTEN mongodb 1011008 385/mongod
tcp 0 0 *:28020 *:* LISTEN mongodb 1011856 385/mongod

Remarque : le port 28020 (27020 + 1000) correspond à la partie admin consultable sur localhost:28020.

Une autre solution consiste à créer un fichier de conf (sur la base de /etc/mongodb.conf) et de demarrer l’instance avec celui ci en utilisant l’option -f:
mongod -f fichier.conf