Initiation aux bases de données NoSQL

Exemple avec MongoDB

Le NoSQL qui signifie Not Only SQL est un modèle de base de données non relationnelle. Ce tutoriel nous permettra de nous familiariser avec les concepts du NoSQL et plus particulièrement avec MongoDB. 2 commentaires Donner une note à l'article (4.5)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Le NoSQL fait partie des nouveaux types de Bases de données dont le fonctionnement est différent de celui des bases de données relationnelles que nous connaissons (SQLServer, MySQL, Oracle et bien d'autres ). Il existe plusieurs bases de données NoSQL telles que Cassandra(utilisée par Facebook), CoucheDB et bien entendu MongoDB. Ces systèmes de gestion des bases de données pour ne citer que ceux-là se distinguent en différents types. Nous avons ceux qui gèrent les bases de données orientées document, orientées colonnes et orientées graphe. En ce qui concerne MongoDB, il gère les bases de données orientées document.

II. Contexte d'utilisation de MongoDB

L'utilisation de MongoDB dépendra bien entendu du type d'application à développer et si possible des données à manipuler. Dans le cadre d'applications destinées aux établissements financiers et boursiers où les transactions sont couramment utilisées, MongoDB ne sera pas la solution adéquate. Par contre, s'il s'agit d'un réseau social ou tout autre type d'applications où il y aurait des envois massifs de données sans toutefois se soucier des contraintes d'intégrité, MongoDB sera beaucoup plus adapté. Comme bon nombre de solutions NoSQL, il implémente le MapReduce et GridFS (pour le stockage de fichiers volumineux). MongoDB est utilisé par de très grands noms tels Disney, MTV, Foursquare, Sourceforge et bien d'autres.

III. Téléchargement de MongoDB

Pour télécharger et installer MongoDB, vous devrez vous rendre ici ou utiliser cet article rédigé par lee1990.

IV. MongoDB : une base de données orientée document

Les données manipulées sont au format BSON(Binary JSON), se présentant sous la forme de documents eux-mêmes enregistrés dans des collections. De manière plus simple, on dira que la collection est ce que les adeptes du monde relationnel appelleront une table et les documents sont les enregistrements.

Voici comment se présente une collection.

Collection
Sélectionnez
{
  "_id" : ObjectId("4efa8d2b7d284dad101e4bc7")
,
  "nom" :"Jean",
  "prenom" :"calvaire"
}
{
  "_id" :ObjectId("4efa8d2b7d104dad250e4bc8")
,
  "nom" :"Kouassi",
  "prenom" :"dupont"
}

Sur chaque document, les éléments peuvent être ajoutés et modifiés selon nos besoins, sauf le champ _id qui est l'identifiant de ce document et en mode lecture seule.

En plus de cela, une collection peut avoir d'autres documents dont les structures différeront les unes des autres comme le montre l'exemple qui suit :

MongoDB
Sélectionnez

{
  "_id" :ObjectId("4efa8d2b7d285bac101e4ac7"),
  "nom" :"Pierrot",
  "prenom" :"lelion",
  "tel" :"995555",
  "enfants":
   [
     "jean-jaques",
     "alfred",
     "alain",
     "gustave",
     "jesica"
   ]
}
{
  "_id" :ObjectId("4efa8d8a8d285bac101e4ba7"),
  "nom" :"Didier",
  "prenom" :"Lefevre",
  "tel" :"66666",
  "adresse":"Rue du chemin"
}

V. Lancement du shell

Toute opération sur le serveur n'est possible que si ce dernier est démarré. Pour le lancer, rendez-vous dans votre dossier d'installation sous la console et entrez la commande mongo ci-dessous.

MongoDB
Sélectionnez
>mongo

Après avoir entré la commande mongo, nous accédons au shell de MongoDBcomme le montre l'image ci-après :

Image non disponible

Par défaut, nous sommes connectés à une base de données nommée test. Cependant, nous avons également la possibilité de ne pas sélectionner de base de données. Pour cela, il faut utiliser la même commande avec l'argument --nodb.

MongoDB
Sélectionnez
>mongo --nodb
Image non disponible

Ou encore, se connecter avec le nom la base de données à laquelle nous souhaitons accéder :

MongoDB
Sélectionnez
>mongo nom_de_la_base_de_donnees

VI. Créer ou accéder à une base de données

Pour créer une base de données avec MongoDB, nous devrons juste utiliser la commande suivante :

Création
Sélectionnez
use le_nom_de_la_base_de_donnees

Nous allons créer notre base de données my_database qui nous servira tout au long de ce tutoriel. Notez qu'avec la commande use, si la base de données existe, on y accède directement ; dans le cas contraire, elle sera créée avant qu'on y accède.

MongoDB
Sélectionnez
>use my_database
Image non disponible

Une fois connectés à notre base de données, nous pourrons effectuer les opérations de base avec MongoDB.

VII. Opérations de base sur le shell

Nous verrons les opérations de base qui sont l'insertion, la modification, la sélection et la suppression.

VII-A. L'insertion

L'insertion sous MongoDB se fait en utilisant la méthode insert en fournissant en paramètres le document à insérer.

Syntaxe Insertion
Sélectionnez
>db.le_nom_de_la_collection.insert({"cle1" :"valeur1","cle2" :"valeur2"})
Illustration
Sélectionnez
>db.auteur.insert({"nom": "Lanna","prenom" :"Bauer","tel" :"0033125425896"})

Le mot-clé db désigne la base de données en cours d'utilisation, auteur désigne la collection sur laquelle porte l'insertion et pour terminer nous utilisons la méthode insert en précisant les informations à sauvegarder (le nom, le prénom et autres).

Image non disponible

Nous venons d'insérer notre premier document. Nous avons également la possibilité de faire la même opération autrement. Il nous suffit de déclarer un objet JavaScript en assignant des valeurs à ses propriétés.

MongoDB
Sélectionnez
>var un_autre_auteur={}
>un_autre_auteur.nom="Kanga"
>un_autre_auteur.prenom="kouadio"
>un_autre_auteur.adresse="Adresse_Abidjan"
>un_autre_auteur.tel="00232015"

À la fin de l'assignation, il nous faudra insérer l'objet dans la collection comme le montre le code et l'image ci-dessous :

MongoDB
Sélectionnez
>db.auteur.insert(un_autre_auteur)
Image non disponible

Le document a été inséré comme le montre l'image ci-dessus.

VII-B. La modification

Pour modifier un document, il nous faut dans un premier temps recueillir l'élément en question et ensuite effectuer la modification.

Nous recueillons l'élément avec la méthode findOne()qui s'utilise de la manière suivante :

MongoDB
Sélectionnez
>var auteur_update=db.auteur.findOne({"cle" :"valeur"})

On peut donc appliquer les modifications que nous voulons :

MongoDB
Sélectionnez
>var auteur_update=db.auteur.findOne({"nom" :"Kanga"})
>auteur_update.nom="f-leb"
>auteur_update.prenom="fabien"
>auteur.tel="00232015"
>auteur_update.articles=[{"Article 1" :"MongoDB:Initiation"},{"Article 2" :"Cassandra"}]
>auteur_update.titre="Modérateur et Correcteur"
>auteur_update.adresse="Aucune"

Pour terminer, il nous faut également sauvegarder le document avec la syntaxe suivante :

 
Sélectionnez
>db.auteur.save(auteur_update)
Image non disponible

VII-C. La suppression

La suppression de documents avec MongoDBpeut s'effectuer de trois manières. La premièreavec la méthode remove, la deuxième avec deleteet la troisième avec drop.

VII-C-1. Avec remove

La méthode remove() s'utilise en précisant des paramètres de la manière suivante : 

MongoDB
Sélectionnez
>db.collection.remove({"cle":"valeur"})

Supprimons par exemple un auteur dont le nom est Anonyme.

 
Sélectionnez
>db.collection.remove({"nom":"Anonyme"})
Image non disponible

Cette méthode utilisée sans paramètre déclenche une erreur.

 
Sélectionnez
>db.auteur.remove()
Image non disponible

VII-C-2. Avec delete

Avecdelete, la suppression concerne non seulement le document, mais aussi ses propriétés. Mais avant, il faut utiliser la méthode findOne() pour extraire le document concerné, ensuite procéder à la suppression et pour finir valider l'opération. À titre d'exemple, nous souhaitons supprimer l'auteur qui se nomme f-leb nous commencerons par l'extraire en fonction de ses paramètres.

MongoDB
Sélectionnez
>var monauteur=db.auteur.findOne({"nom":"f-leb"})
Image non disponible

La variable monauteur contient les informations concernant f-leb. Nous pouvons donc avoir plus de détails en saisissant juste le nom de la variable.

Image non disponible

On décidera par exemple de supprimer son adresse et son titre.

MongoDB
Sélectionnez
>delete monauteur.adresse
>delete monauteur.titre
Image non disponible

Lorsque la suppression est terminée, nous devons impérativement sauvegarder la variable monauteur dans la collection.

MongoDB
Sélectionnez
>db.auteur.save(monauteur)

Le document est ainsi sauvegardé.

Image non disponible

Effectuons à nouveau une requête pour lister les documents et vérifions.

MongoDB
Sélectionnez
>db.auteur.findOne({"nom":"f-leb"})
Image non disponible

Le titre et l'adresse ont bel et bien été supprimés.

VII-C-3. Avec drop

Cette méthode permet de supprimer une collection de la base de données. Voici sa syntaxe.

MongoDB
Sélectionnez
>db.nom_de_la_colection.drop()

Supprimons une collection nommée testt.

Image non disponible

La valeur trueindique que la collection existe et qu'elle a été supprimée. Dans le cas contraire, la valeur false aurait été retournée.

VIII. MongoDB et ses $opérateurs

MongoDB dispose de plusieurs opérateurs commençant par le caractère $. Ces opérateurs permettent certaines actions ou opérations sur les documents et/ou les collections de la base de données en cours d'utilisation.

VIII-A. Le $set

Cet opérateur permet de modifier la valeur d'un champ. Si le champ existe, il est mis à jour. Dans le cas contraire, il est ajouté au document.

Exemple : nous ajoutons un auteur :

 
Sélectionnez
>db.auteur.insert({"nom":"andrestevejob","prenom" :"user_test","titre" :"redacteur"})

Maintenant essayons notre opérateur $setavec les deux exemples ci-dessous :

Premier
Sélectionnez
>db.auteur.update({"nom" :"andrestevejob"},{"$set":{"prenom" :"test_user_prenom"}})

Voici donc le contenu du document lorsque nous effectuons un findOnepour la première méthode :

Image non disponible
Deuxième
Sélectionnez
>db.auteur.update({"nom" :"andrestevejob"},{"$set":{"titre" :"Rédacteur et modérateur"}})

Pour la deuxième méthode, le résultat est affiché ci-dessous :

Image non disponible

La première méthode modifie la valeur du prénom qui était user_test à test_user_prenom, tandis que la deuxième méthode ajoute le champ titre avec comme valeur Rédacteur et Modérateur.

VIII-B. Le $unset

Cet opérateur permet de supprimer un champ si celui-ci existe et ne fait rien dans le cas contraire. Voici comment il s'utilise :

 
Sélectionnez
>db.auteur.update({"cle":"valeur"},{"$unset":{"nom_du_champ" :"la_valeur_du_champ"}})

VIII-C. Le $inc

Celui-là est utilisé pour effectuer une incrémentation, il n'est utilisable que sur les valeurs numériques :

 
Sélectionnez
>db.auteur.update({"cle":"valeur"},{"$inc":{"nom_du_champ":valeur_a_ajouter}})

VIII-D. Le $push

Cet opérateur permet d'ajouter des éléments à la fin d'un tableau si ce dernier existe et dans le cas contraire, il le crée. Pour notre collection d'auteurs du site Developpez, supposons qu'il faille ajouter des informations telles que leurs articles. C'est dans ce cas précis que cet opérateur intervient :

 
Sélectionnez
>db.auteur.update({"cle":"valeur"},{"$push" :{"nom_du_champ":{"cle" :"valeur"}}})

À titre d'exemple, ajoutons les articles du membre et rédacteur de djibril.

 
Sélectionnez
>db.auteur.update({"nom":"djibril"},{"$push":{"articles":{"libelle" :"test","datepublication":new Date(),"nombrepage":124,"url" :"https://developpez.com/djibril/cours/perl"}}})

VIII-E. Le $each

Cet opérateur permet d'ajouter des informations de façon consécutive pour un champ donné. Mais il s'utilise avec l'opérateur précédent :

 
Sélectionnez
>db.auteur.update({"cle":"valeur"},{"$push":{"la_valeur_du_champ":{"$each":[valeur_1,valeur_2,...,valeur_n]}}})

Ajoutons par exemple les numéros de notre Communitity Manager Lana Bauer.

 
Sélectionnez
>db.auteur.update({"nom":"Lana"},{"$push":{"numeros":{"$each" :[6655121,52415254,857121]}}})

VIII-F. Le $slice

Il permet de limiter un nombre d'éléments à insérer. Partant de l'exemple précédent, cet opérateur nous permettra par exemple de limiter le nombre de numéros à une valeur numérique n.

Lorsque la modification est effectuée, le document est sauvegardé tout en prenant en compte les derniers n éléments fournis . Il s'utilise de la manière suivante :

Syntaxe
Sélectionnez
>db.auteur.update({"cle":"valeur"},{"$push":{"la_valeur_du_champ":{"$each":[valeur_1,valeur_2,...,valeur_n],"$slice":nombre_limite}}})
Exemple
Sélectionnez
>db.auteur.update({"nom":"Lana"},{"$push":{"articles":{"$each":["article_1","article_2","article_3","article_4","article_5","article_6"],"$slice":4}}})

IX. Conclusion et remerciements

Cet article met en exergue une utilisation primaire, simple et basique de MongoDB à travers des exemples d'insertion, de mise à jour et l'utilisation de certains opérateurs de MongoDB.

Tous les tutoriels publiés sur le site Developpez passent par différentes étapes avant d'être connus du grand public. C'est pour cela que j'adresse mes sincères remerciements à Lana Bauer, djibril, zoom61, Francis Walter et bien d'autres.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2015 Landry Bogbé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.