Opérateurs logiques
Les opérateurs logiques vous permettent de combiner plusieurs conditions pour créer des filtres plus précis. Découvrez $and, $or et $not.
Vue d'ensemble
MEL propose trois opérateurs logiques :
| Opérateur | Description | Résultat |
|---|---|---|
$and | ET logique | Vrai si toutes les conditions sont vraies |
$or | OU logique | Vrai si au moins une condition est vraie |
$not | Négation | Inverse le résultat d'une condition |
Bon à savoir
$and et $or prennent un tableau d'au moins 2 conditions. $not s'applique à une seule comparaison.
$and - ET logique
L'opérateur $and combine plusieurs conditions. L'expression est vraie uniquement si toutes les conditions sont vraies.
Par exemple, pour trouver les commandes validées d'un bénéficiaire spécifique :
{
"$and": [
{ "beneficiary": { "$eq": 2 } },
{ "status": { "$eq": "validated" } }
]
}Cette expression se lit : "Trouve les éléments où le bénéficiaire est 2 ET le statut est validated".
Exemple avec 3 conditions
Vous pouvez combiner autant de conditions que nécessaire :
{
"$and": [
{ "status": { "$eq": "active" } },
{ "amount": { "$gt": 100 } },
{ "category": { "$in": ["premium", "gold"] } }
]
}Astuce
Si vous avez plusieurs conditions sur des champs différents sans opérateur logique, MEL les combine implicitement avec un $and. Mais il est recommandé d'être explicite pour plus de clarté.
$or - OU logique
L'opérateur $or est vrai si au moins une des conditions est vraie. C'est utile quand vous avez plusieurs critères alternatifs.
Par exemple, pour trouver les éléments qui sont soit des factures, soit des dépenses :
{
"$or": [
{ "type": { "$eq": "invoice" } },
{ "type": { "$eq": "expense" } }
]
}Cette expression se lit : "Trouve les éléments où le type est invoice OU le type est expense".
Conseil
Dans ce cas précis, il serait plus simple d'utiliser $in :{ "type": { "$in": ["invoice", "expense"] } }
Utilisez $or quand les conditions portent sur des champs différents ou utilisent des opérateurs différents.
Exemple avec champs différents
$or est particulièrement utile quand les conditions portent sur des champs différents :
{
"$or": [
{ "isUrgent": { "$eq": true } },
{ "priority": { "$eq": 1 } },
{ "deadline": { "$lt": "2024-01-15" } }
]
}Cette expression trouve les éléments urgents, OU de priorité 1, OU dont la date limite est passée.
$not - Négation
L'opérateur $not inverse le résultat d'une comparaison. Il s'applique à une seule condition de comparaison.
Par exemple, pour trouver les éléments dont le statut n'est PAS "draft" :
{ "status": { "$not": { "$eq": "draft" } } }Cette syntaxe peut sembler lourde, mais elle est utile pour inverser des opérateurs complexes. Par exemple, pour trouver les éléments qui ne correspondent PAS à un pattern :
{ "email": { "$not": { "$regex": "@temp\.com$" } } }Alternative
Pour les cas simples, préférez $ne (not equal) plutôt que $not avec $eq.{ "status": { "$ne": "draft" } } est plus concis.
Combinaisons
La vraie puissance de MEL vient de la possibilité de combiner ces opérateurs. Vous pouvez imbriquer $and et $orpour créer des logiques complexes.
$and avec $or imbriqué
Trouvez les commandes validées qui sont soit des factures, soit des dépenses :
{
"$and": [
{ "status": { "$eq": "validated" } },
{
"$or": [
{ "type": { "$eq": "invoice" } },
{ "type": { "$eq": "expense" } }
]
}
]
}Exemple complexe
Un filtre plus élaboré combinant plusieurs niveaux :
{
"$and": [
{
"$and": [
{ "beneficiary": { "$eq": 2 } },
{ "status": { "$eq": "validated" } }
]
},
{
"$or": [
{ "type": { "$eq": "invoice" } },
{ "type": { "$eq": "expense" } }
]
},
{ "status": { "$not": { "$eq": "draft" } } }
]
}Attention à la lisibilité
Les expressions très imbriquées deviennent difficiles à lire et à maintenir. Si votre expression dépasse 3-4 niveaux, envisagez de la simplifier ou de la découper en plusieurs filtres.
Tableau récapitulatif de logique
| Expression | En français |
|---|---|
$and: [A, B] | A est vrai ET B est vrai |
$or: [A, B] | A est vrai OU B est vrai (ou les deux) |
$not: A | A n'est PAS vrai |
$and: [A, $or: [B, C]] | A est vrai ET (B ou C est vrai) |
Prochaine étape
Vous savez maintenant combiner des conditions. L'étape suivante approfondit les expressions imbriquées avec des exemples concrets.