L'égalité simple
La forme la plus simple d'un filtre : { champ: valeur }. Elle sélectionne les documents dont le champ vaut exactement cette valeur.
db.clients.find({ ville: "Limoges" })
Les opérateurs de comparaison
Ils comparent la valeur d'un champ à une référence.
| Opérateur | Signifie |
|---|---|
$eq / $ne | égal / différent |
$gt / $gte | supérieur / supérieur ou égal |
$lt / $lte | inférieur / inférieur ou égal |
Exemple — clients avec plus de 100 points
db.clients.find({ points: { $gt: 100 } })
Exemple — points entre 50 et 150 (inclus)
db.clients.find({ points: { $gte: 50, $lte: 150 } })
Chercher dans une liste de valeurs
$in teste si la valeur figure dans une liste ; $nin teste l'inverse.
db.clients.find({ ville: { $in: ["Limoges", "Brive"] } })
db.clients.find({ ville: { $nin: ["Paris"] } })
$in évite d'empiler plusieurs $or quand on teste le même champ contre plusieurs valeurs.Les opérateurs logiques
Plusieurs champs dans le même objet forment déjà un ET implicite. Pour un OU, ou des combinaisons, on utilise $and, $or, $nor, $not.
ET implicite
db.clients.find({ ville: "Limoges", points: { $gte: 80 } })
OU explicite
db.clients.find({ $or: [
{ ville: "Brive" },
{ points: { $gt: 150 } }
] })
$or et $and prennent un tableau de conditions. On combine sans limite : un $or peut contenir des conditions elles-mêmes composées.Présence d'un champ & type
$exists teste si un champ est présent ; $type teste son type BSON. Très utile quand la collection n'a pas de schéma strict.
// clients qui ont un champ "email" db.clients.find({ email: { $exists: true } }) // documents où "points" est bien un nombre db.clients.find({ points: { $type: "number" } })
Rechercher un motif de texte ($regex)
$regex filtre sur une expression régulière — pratique pour « commence par », « contient », etc. (Pour de la vraie recherche plein-texte, on verra l'index texte au chapitre 12.)
// villes commençant par "Lim" db.clients.find({ ville: { $regex: "^Lim" } }) // insensible à la casse db.clients.find({ ville: { $regex: "brive", $options: "i" } })
Écris les filtres qui serviront à l'écran de recherche de l'appli : les campagnes statut: "OUVERTE" ET zone: "Ladignac-le-Long" ; celles dont la dateLimite est $gte à aujourd'hui (new Date()) ; celles de plusieurs communes avec $in. Ces filtres deviendront les méthodes du repository Spring (ex. findByZoneAndStatut).
- Comparaison :
$gt,$gte,$lt,$lte,$ne. - Listes :
$in,$nin. - Logique : ET implicite ;
$or,$and,$nor,$not. - Structure :
$exists,$type; texte :$regex.