Sommaire

Autres opérateurs

1. L’opérateur $expr

Apparu avec la version 3.6, $expr permet d’utiliser des expressions dans nos requêtes. Ces expressions peuvent notamment contenir des opérateurs, des objets ou des chemins pointant des champs.

Nous allons à présent afficher le prénom des personnes dont la longueur du nom (en nombre de caractères) multipliée par 12 est supérieure à l’âge. Notre find filtre d’abord sur la présence obligatoire des champs nom et age car, notre expression s’apprêtant à opérer dessus, nous voulons nous assurer qu’ils sont disponibles. Nous utilisons ensuite l’opérateur $strLenCP qui va travailler sur la valeur contenue dans le champ nom de chaque document où ce dernier est présent. Il va ensuite vérifier pour chaque document si le produit de la longueur du nom par 12 donne un nombre supérieur à la valeur contenue dans le champ age. Cette notation avec le symbole dollar ($) entouré de guillemets est ce que l’on appelle le field path, il pointe les valeurs contenues dans les champs du document en cours de traitement. C’est un peu l’équivalent du pointeur this suivi du nom d’une de ses données membres dans de nombreux langages de programmation orientée objet.

db.personnes.find({ 
 "nom": { $exists: 1 }, 
 "age": { $exists: 1 }, 
 $expr: { $gt: [ {$multiply: [{ $strLenCP: ...