[Tutoriel] MongoDB : examiner les fonctionnalités de requêtage

MongoDB est une base de données NoSQL relativement simple à prendre en main et très riche fonctionnellement. Elle permet d’adresser les problématiques de temps réel dans un contexte Big Data (mise en cluster, haute disponibilité, tolérance aux pannes). A partir de MongoDB, on peut construire des applications web destinées à une large audience.

[Tutoriel] MongoDB : examiner les fonctionnalités de requêtage

 

Afin de vous faire découvrir MongoDB, je vous propose donc une série d’articles. Pour ce premier tutoriel, nous allons aborder l’installation et examiner les fonctionnalités de requêtage de la solution. C’est parti !

 

Installation

 

La procédure est bien décrite sur le site de l’éditeur et je vous invite à consulter la section dédiée.

Pour ma part, je vous conseille d’installer MongoDB sur une machine virtuelle et si possible via l’utilitaire Vagrant. Cela vous permettra de vous familiariser avec la solution en ayant toujours la possibilité de redémarrer sur un système vierge. C’est particulièrement utile lorsqu’on commence à aborder la partie administration.

Pour voir comment faire, consultez le tutoriel « Comment créer une machine MongoDB avec Vagrant ?« .

 

Premiers pas

 

Format de stockage de mongoDB

MongoDB est donc une base NoSQL. Les informations sont stockées dans des documents au format JSON (plus exactement BSON, une version binaire du JSON).

Le JSON est devenu en quelques années un format très populaire sur Internet. Il permet de stocker les données avec les métadonnées associées (les noms de colonnes). Un peu comme le XML mais dans un format plus compacte. Il est aujourd’hui utilisé dans nombre de technologies web dérivées du Javascript (NodeJS, AngularJS, etc.).

 

Création de notre première collection

MongoDB est structuré autour de 3 éléments : le document, la collection et la database.

  • Une database contient une ou plusieurs collections.
  • Une collection regroupe un ensemble de documents.

Nous allons démarrer le shell de MongoDB en tapant simplement la commande mongo en ligne de commande.

Le shell propose plusieurs commandes pour manipuler ces objets :

show databases     // Pour visualiser les différentes databases
use database.      // Pour aller sur une database particulière
show collections   // Pour visualiser les collections de la database 

La commande db.nomDeMaCollection.insert permet de créer notre premier document. Cela crée automatiquement la collection si elle n’existe pas. La commande db.nomDeMaCollection.find permet de retrouver tous les documents d’une collection.

Vous pourrez noter l’utilisation du format JSON pour l’insertion du document.

Pour ce tutoriel, j’ai choisi de créer notre base à partir d’un dump de base. Pour ce faire, j’ai utilisé la commande  mongorestoreen précisant la Database cible et le nom de la collection.

Tutoriel MongoDB : Les requêtes - Part. 1
Examinons un peu cette collection. La commande db.nomDeMaCollection.count permet de compter le nombre d’éléments de la collection. Si j’utilise la commande db.nomDeMaCollection.find, je vois que les documents contiennent beaucoup d’informations sur les films. Par ailleurs, mongoDB limite le nombre de documents retournés afin de ne pas gaspiller les ressources du système pour afficher un résultat illisible.


Si je souhaite afficher les documents suivants, il me suffit de taper it.
Une manière plus efficace d’afficher un résultat est de demander à Mongo de retourner un seul document avec la commande db.nomDeMaCollection.findOne.

Tutoriel MongoDB : Les requêtes - Part. 1

 

Recherche de documents

 

Utilisation de filtre simple

Pour rechercher un document, j’ai besoin de placer une condition dans ma commande find. Comment faire ?
Tout simplement en décrivant cette condition dans un document JSON.

Si je veux par exemple rechercher les films de l’année 2012, il suffit d’écrire la ligne suivante :
db.films.find({"year":2012})

Tutoriel MongoDB : Les requêtes - Part. 1

Pour améliorer l’affichage, on peut utiliser la commande pretty.

Tutoriel MongoDB : Les requêtes - Part. 1
C’est mieux mais ce n’est pas encore parfait car le nombre de documents retournés est important et chaque document est très riche.

 

Projection

La projection permet de sélectionner les informations à renvoyer. Si, par exemple, je m’intéresse uniquement au titre du film, à son année de sortie et aux noms des acteurs, je vais limiter les informations retournées en précisant les champs souhaités dans un document JSON (toujours ce fameux JSON). Et, également passer ce document comme deuxième argument de ma recherche find.

Tutoriel MongoDB : Les requêtes - Part. 1

Pour conserver un champ, il suffit de le préciser dans ce document et de lui affecter la valeur 1.
Les plus attentifs d’entre vous auront noté que la requête a renvoyé également le champ _id. C’est le fonctionnement normal de la commande find qui renvoie systématiquement la clé du document.
Si l’on souhaite l’exclure, il faut le préciser dans la commande.

Tutoriel MongoDB : Les requêtes - Part. 1

 

Recherche dans un tableau

Les documents contiennent des champs simples comme l’année ou le titre du film mais aussi des tableaux pour stockés le nom des acteurs. Comment faire alors des recherches dans un tableau ? Tout simplement de la même manière que pour un champ simple :

db.films.find({"actors":"Leonardo DiCaprio"},{"title":1,"year":1,"actors":1, _id:0}).pretty()

Tutoriel MongoDB : Les requêtes - Part. 1
Je peux bien sûr combiner plusieurs filtres.

db.films.find({"actors":"Leonardo DiCaprio", "year":2002},{"title":1,"year":1,"actors":1, _id:0}).pretty()_

Tutoriel MongoDB : Les requêtes - Part. 1
Comment faire si je veux filtrer les films avec Leonardo DiCaprio ou Tom Hanks ? Pour cela, on utilise alors l’opérateur $in.

Tutoriel MongoDB : Les requêtes - Part. 1

Pour avoir uniquement les films avec Leonardo DiCaprio et Tom Hanks, il existe l’opérateur $all.

Tutoriel MongoDB : Les requêtes - Part. 1

 

Recherche avancée

Le langage d’interrogation de MongoDB est extrêmement puissant. Il permet de réaliser toutes les requêtes possibles et l’objectif de ce tutoriel n’est pas d’en faire la liste exhaustive. Nous allons simplement terminer par quelques recherches un peu plus poussées.

Les documents MongoDB peuvent contenir des documents imbriqués. Dans notre collection example, nous avons ainsi le document awards.

Tutoriel MongoDB : Les requêtes - Part. 1

Peut-on faire des recherches sur des éléments de ce document ? Oui, bien entendu ! Il suffit pour cela d’utiliser la notation nomDocument.nomChamp.

On fera attention de bien mettre cette élément entre quotes dans notre requête.

Tutoriel MongoDB : Les requêtes - Part. 1

Dans toutes nos recherches, nous avons utilisé des conditions d’égalité avec l’opérateur :.
Il n’est pas possible (contrainte JSON ?) d’utiliser les signes habituels (>, >=, <, <=, !=). MongoDB propose à la place des opérateurs dédiés ($gt, $gte, $lt, $lte, $ne). Prenons un exemple et faisons une recherche sur tous les films ayant remportés au moins un prix.

Tutoriel MongoDB : Les requêtes - Part. 1

Un autre exemple avec une recherche sur les films ayant remportés plus de 80 prix.

Tutoriel MongoDB : Les requêtes - Part. 1

 

Trier les résultats

Quand les recherches renvoient beaucoup de documents, il peut être utile de les trier.
On dispose pour cela de la fonction sort qui va permettre de trier les résultats sur un champ par ordre croissant ou décroissant.

L’usage est très simple. Nous allons donc reprendre notre requête précédente et trier les résultats par ordre décroissant sur le nombre de prix obtenus.

Tutoriel MongoDB : Les requêtes - Part. 1

 

Ceci termine ce premier tutoriel sur MongoDB. Dans un prochain article, nous étudierons les possibilités d’insertion et de mise à jour des documents.

A très bientôt !

 

  • A propos
  • Derniers articles

Il n'existe pas de commentaire pour le moment.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*