Dans MongoDB, le $cond
l'opérateur de pipeline d'agrégation évalue une expression booléenne et renvoie l'une des deux expressions de retour spécifiées, selon que l'expression booléenne est true
ou false
.
Le $cond
L'opérateur accepte deux syntaxes :une syntaxe longue et une syntaxe courte. Des exemples de chacun sont ci-dessous.
Exemple
Supposons que nous ayons une collection appelée pets
avec le document suivant :
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Syntaxe longue
Voici un exemple d'application de $cond
à ce document en utilisant la syntaxe longue :
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Résultat :
{ "isCanine" : "Yes" }
Dans cet exemple, nous avons comparé le type
champ à une valeur littérale.
Dans l'exemple suivant, nous comparons deux champs dans le document.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Résultat :
{ "bodyType" : "Skinny" }
Syntaxe abrégée
Le $cond
accepte également une syntaxe abrégée qui rend votre code plus concis.
Le raccourci consiste essentiellement à supprimer le if
, then
, et else
mots-clés.
Lorsque vous faites cela, vous devez enfermer les expressions dans un tableau.
Dans cet exemple, nous réécrivons le premier exemple pour utiliser la syntaxe abrégée :
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Résultat :
{ "isCanine" : "Yes" }
Et voici le deuxième exemple utilisant la sténographie :
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Résultat :
{ "bodyType" : "Skinny" }