Vous êtes sur la page 1sur 10

3DSI Mme Gaâbeb

Requêtes avancées Avec MongoDB

I. Depuis un shell MongoDB)

Plusieurs critères (AND)

Pour définir plusieurs critères, il suffit juste d'utiliser plusieurs propriétés au sein de
l'objet de recherche :

db.nom_collection.find({ critère1: "…", critère2: "…" })

MongoDB Enterprise > db.etud.find({nom: 'Tom'})

{ "_id" : ObjectId("6199497845ae917f59b99c62"), "nom" : "Tom", "prenom" : "TTT


{ "_id" : ObjectId("61994a029ee7f54edede17e6"), "nom" : "Tom", "prenom" : "TTT
{ "_id" : ObjectId("61994c638908545859760d75"), "nom" : "Tom", "prenom" : "TTT

Soit l'un soit l'autre (OR)

Pour faire un OR avec MongoDB, on utilise la propriété $or. Cette dernière contient


un tableau composé des critères de recherche.

1{
2 $or: [
3 { critère1: "…" },
4 { critère2: "…" }
5 ]
}

Exemple : Récupérer tous les étudiants portant le nom "aouini", ou, portant le
prenom "TTT":
MongoDB Enterprise >db.etud.find({$or:[{nom:"aouini"},{prenom:"TTT"}]})

{ "_id" : ObjectId("6199497845ae917f59b99c5f"), "nom" : "aouini",


"prenom" : "ons" }
{ "_id" : ObjectId("6199497845ae917f59b99c60"), "nom" : "aouini",
"prenom" : "asma" }
{ "_id" : ObjectId("6199497845ae917f59b99c62"), "nom" : "Tom",
"prenom" : "TTT" }
{ "_id" : ObjectId("61994a029ee7f54edede17e3"), "nom" : "aouini",
"prenom" : "ons" }
{ "_id" : ObjectId("61994a029ee7f54edede17e4"), "nom" : "aouini",
"prenom" : "asma" }
3DSI Mme Gaâbeb

{ "_id" : ObjectId("61994a029ee7f54edede17e6"), "nom" : "Tom",


"prenom" : "TTT" }
{ "_id" : ObjectId("61994c638908545859760d72"), "nom" : "aouini",
"prenom" : "ons" }
{ "_id" : ObjectId("61994c638908545859760d73"), "nom" : "aouini",
"prenom" : "asma" }
{ "_id" : ObjectId("61994c638908545859760d75"), "nom" : "Tom",
"prenom" : "TTT" }

Conditions < <= > >= !=

Des conditions peuvent être ajoutées. Voici les propriétés réservées correspondantes :

Conditio
Propriété
n
< $lt
<= $lte
> $gt
>= $gte
!= $ne

Trouve tous les personnages plus jeunes que 40 ans.

1{ old: { $lt: 40 } }

Trouve tous les personnages qui ont entre 18 et 40 ans exclus

1{ old: { $gt: 18, $lt: 40 }

II. Depuis Node js


1. Sélection avec un seul critère
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  var query = { address: "Park Lane 38" };
  dbo.collection("customers").find(query).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});
3DSI Mme Gaâbeb

2. Projection
//Projection Nom Adresse
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {


  if (err) throw err;
  var dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { _id: 0, name:
1, address: 1 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

3. Sélecteurs de requête 

3.1 Les sélecteurs de comparaison 

Nom La description

Correspond aux valeurs qui sont égales(equal) à une valeur spécifiée.

$eq Syntaxe: {champ: {$eq: valeur} }

Exemple:

db .collection("etud"). find ({age:{$eq:20 } } )

Correspond aux valeurs supérieures(greater than ) à une valeur spécifiée.

Syntaxe: { Champ: {$gt: valeur} }
$gt
Exemple:

db .collection("etud"). find ( { age :


{ $gt :20 } } )
3DSI Mme Gaâbeb

Nom La description

Correspond aux valeurs supérieures ou égales (greater than or equal) à une


valeur spécifiée.

$gte Syntaxe: {Champ: {$gte: valeur} }

Exemple:

db .collection("etud"). find ({age :{ $gte :20 }} )

Correspond aux valeurs qui sont inférieures (less than ) à une valeur spécifiée.

$lt Syntaxe: {champ: {$lt: valeur} }

Exemple:

db .collection("etud"). find ({age :{ $lt :20 } } )

Correspond aux valeurs inférieures ou égales (less than or equal) à une valeur
spécifiée.

$lte Syntaxe: {champ: {$lte: valeur} }

Exemple:

db .collection("etud"). find ({age :{$lte:20 } } )

Correspond à toutes les valeurs qui ne sont pas égales(not equal) à une valeur
spécifiée.
$ne
Syntaxe: {champ: {$ne: valeur} }

Exemple:

db .collection("etud"). find ({age :{ $ne :20 } } )

$in Correspond à l'une des valeurs spécifiées dans un tableau.


3DSI Mme Gaâbeb

Nom La description

Syntaxe :

{champ :{$in :[ < valeur1 >,< valeur2 > ,... <


valeurN > ] } }

Exemple:

db.collection("etud").find ({age :{$in :[ 18,22]}} )

Ne correspond à aucune des valeurs spécifiées dans un tableau (not in).

Syntaxe :

$nin {champ :{$nin :[< valeur1 >,< valeur2 > , ... <
valeurN > ] } }

Exemple:

db.collection("etud").find({age :{$nin:[ 18,22]} } )

3.2 Sélecteurs de logique 

Nom La description

$or Joint les clauses de requête avec une logique OR. Renvoie tous les documents
qui correspondent aux conditions de l'une ou l'autre clause.

Syntaxe: { $or: [ { <critère1> }, { < critère 2> } , ... , { < critère N> } ] }

Exemple1:

 db.collection("etud").find(
3DSI Mme Gaâbeb

Nom La description

  {
    $or: [
        { nom: "m1" },
        { prenom: "m2" }
    ]
}).toArray(function (error, results) {
  if (error) throw error;

  results.forEach(function(obj, i) {
      console.log(
          "Nom : " + obj.nom + "\n"+    
          "prenom : " + obj.prenom
      );

Exemple1:

db .collection("produit").find({$or:[{quantite:{ $lt:
20 } }, { prix: 10 } ] } )

Joint les clauses de requête avec une logique AND. Renvoie tous les documents
qui correspondent aux conditions des deux clauses.

Syntaxe:

Syntaxe: { $and: [ { <critère1> }, { < critère 2> } , ... , { < critère N> } ] }

$and Exemple:

db .collection("produit"). find ( { $and: [ { price:


{ $ne: 1.99 } }, { price: { $exists: true } } ]
} )

 Tous les produits dont le champ prix existe ET la valeur du prix n'est pas
égale à 1.99
3DSI Mme Gaâbeb

Nom La description

Inverse l'effet d'une expression de requête et renvoie les documents qui


ne correspondent pas à l'expression de requête.

Syntaxe :{ champ: { $not: { <expression> } } }

db .collection("produit"). find ({ prix : { $not : { $gt : 1,99 } } })

$not Cette requête sélectionnera tous les documents de la collection produit où :

La valeur du champ prix est inférieure ou égale à 1.99 ou le champ prix n'existe


pas :

 { $not: { $gt: 1.99 } }est différent de l'  opérateur {$lt:1.99}.En effet, $lt


renvoie uniquement les documents où le champ existe et sa valeur est
inférieure ou égale à 1.99

Joint les clauses de requête avec une logique NOR :renvoie tous les documents
qui ne correspondent pas aux deux clauses.(ni l'un ni l'autre)

Syntaxe 

{ $nor: [ { <expression1> }, { <expression2> }, ... {


<expressionN> } ] }
Exemple :
db .collection("produit"). find ({ $nor : [ { prix
: 1,99 }, {quantite : { $lt :10 } } ] })
$nor
Cette requête renverra tous les documents qui :

 contiennent le champ prix dont la valeur n'est pas égale à 1.99 et


contiennent le champ quantité dont la valeur n'est pas inférieure
à10  ou
 contiennent le champ prix dont la valeur n'est pas égale à 1.99 et
ne contient pas le champ quantité    ou
 ne contiennent pas le champ prix  mais contiennent le  champ
quantite dont la valeur n'est pas inférieure à10   ou
 ne contient pas le champ prix  et ne contient pas le champ quantité
3DSI Mme Gaâbeb

3.3 Sélecteur élément 

Nom La description

$exists Correspond aux documents qui ont le champ spécifié.

3.4 Sélecteur d'évaluation 

Nom La description

Sélectionne les documents dont les valeurs correspondent à une expression


$regex régulière spécifiée.

Syntaxe d'une expression regulière :

{ < champ > : { $regex : /pattern/ < options > } }

Option La description

i Insensibilité à la casse pour faire correspondre les majuscules et les


minuscules. 

m Pour les modèles qui incluent des ancres (^ pour le début, $ pour la
fin), fait correspondre au début ou à la fin de chaque ligne pour les
chaînes avec des valeurs multilignes. Sans cette option, ces ancres
3DSI Mme Gaâbeb

Option La description

correspondent au début ou à la fin de la chaîne. 

Si le pattern ne contient pas d'ancres ou si la valeur de chaîne n'a pas


de caractères de saut de ligne (par exemple \n), l' option m n'a aucun
effet.

Exemple :

db.collection("etud").find(
  {
     
           //les prenoms qui finit par ns
           prenom: { $regex:/ns$/}

     
  })
db.collection("etud").find({
//les prenoms qui commencent par a minuscule
prenom: {$regex:/^a/}
})
db.collection("etud").find({
//les prenoms qui commencent par a ou A
prenom: {$regex:/^a/i}
})

4. Manipulation du type Date

db.collection("etud").insertOne({ nom: "aouini", prenom:


"aaaa",age:10 ,date_Naiss:Date("2011-03-03")}, function(err,
client) {
    console.log("etudiant crée ")
  })
 db.collection("etud").find({ date_Naiss : { $gte : Date("2013-
10-01")

   }}).toArray(function (error, results) {


  if (error) throw error;
3DSI Mme Gaâbeb

  results.forEach(function(obj, i) {
    console.log("#######")
    console.log(
          "Nom : " + obj.nom + "\n"+         //
          "prenom : " + obj.prenom           //
      );
  })})

Vous aimerez peut-être aussi