24 décembre 2013

MongoDB - Effectuer des Recherches


MongoDB permet d'effectuer des recherches sur les documents d'une collection.

Nous allons voir dans cet article comment faire une recherche sur les documents dans MongoDB en Java.



Recherche

Dans MongoDB, il est possible d'effectuer des recherches en indiquant des valeurs et des conditions sur une ou plusieurs clés.

La documentation de MongoDB présente les opérateurs de recherche : http://docs.mongodb.org/manual/reference/operator/query/

La liste suivante présente les expressions possibles pour définir des critères de recherche :
  • égalité avec une valeur
{ "clé" : valeur }

  • est une valeur non définie :
{ "clé" : null }

  • une valeur date :
{ "clé" : new Date("10/02/2010") }

  • une valeur minimale et/ou maximale :
{ "clé" : { "&gt" : valeur } } : supérieur strict à
{ "clé" : { "&gte" : valeur } } : supérieur ou égal à
{ "clé" : { "&lt" : valeur } } : inférieur strict à
{ "clé" : { "&lte" : valeur } } : inférieur ou égal à
  • une liste de valeurs
{ "clé" : { "$in" : [ valeur1, valeur2, valeur3 ] } }
{ "clé" : { "$nin" : [ valeur1, valeur2, valeur3 ] } }

{ "clé" : /valeur/ }
{ "clé" : /valeur/i } (avec "i" pour non sensible à la casse)

  • une négation
{ "$not" : { expression } }

  • une condition ET
{ "$and" : [ expression1, expression2, ..., expressionN ] }

  • une condition OU
{ "$or" : [ expression1, expression2, ..., expressionN ] }

Recherche en Java

En Java, nous utilisons l'objet QueryBuilder permet d'écrire les requêtes pour MongoDB.

Voici les méthodes de QueryBuilder :
  • start() : cette méthode statique permet de commencer une nouvelle expression.
    • Elle correspond à l'ouverture "{" de l'expression. 
    • Elle peut prendre en paramètre le nom de la clé de l'expression.
  • get() : elle marque la fin de l'expression. 
    • Elle correspond à la fermeture "}" de l'expression. 
    • Elle retourne l'objet DBObject qui sera à passer en paramètre de la méthode find de la collection de documents.

La liste suivante présente les expressions possibles pour définir des critères de recherche avec le client Java pour MongoDB :
  • égalité avec une valeur
QueryBuilder.start("cle").is(valeur).get();

  • est une valeur non définie :
QueryBuilder.start("cle").is(null).get()

  • une valeur date :
java.util.Date date;

QueryBuilder.start("cle").is(date).get()

  • une valeur minimale et/ou maximale :
QueryBuilder.start("cle").greaterThan(valeur).get()
QueryBuilder.start("cle").greaterThanEquals(valeur).get()
QueryBuilder.start("cle").lessThan(valeur).get()
QueryBuilder.start("cle").lessThanEquals(valeur).get()

  • une liste de valeurs
BasicDBList values = new BasicDBList();
values.add(valeur1);
values.add(valeur2);

QueryBuilder.start("cle").in(values).get();

Pattern pattern = Pattern.compile("the help");
QueryBuilder.start("clé").regex(pattern).get();

  • une négation
QueryBuilder.start("clé").not().greaterThan(10).get()

  • une condition ET
QueryBuilder.start().and(
    QueryBuilder.start()......get(), 
    QueryBuilder.start()......get()
).get()
  • une condition OU
QueryBuilder.start().or(
    QueryBuilder.start()......get(), 
    QueryBuilder.start()......get()
).get()

Exemple de requêtes

Recherche d'un livre selon l'auteur et le titre :
QueryBuilder.start().and(
    QueryBuilder.start("author").regex(Pattern.compile("Rowling")).get(),
    QueryBuilder.start("title").regex(Pattern.compile("Hallows")).get()
).get();

Projet Java

Nous allons créer un projet pour tester les requêtes de recherche sur MongoDB en Java :
Pour cela, suivre les étapes suivantes :
  • Créer un nouveau projet Java de type Maven
  • Dans le fichier pom.xml, définir les dépendances suivantes :

  • Créer le répertoire "src/test/java" dans le projet
  • Créer le package "org.tuto.mongodb"
  • Créer le test Java suivant :

  • Lancer le test

La réussite du test indique que nous avons réussi à stocker les documents et à rechercher des documents dans la base MongoDB.

Le résultat du test affiche la requête générée et le résultat de la recherche :

Conclusion

Nous venons de voir comment effectuer des recherches sur les documents stockés dans MongoDB.

Ressources