In MongoDB, il $cond
l'operatore della pipeline di aggregazione valuta un'espressione booleana e restituisce una delle due espressioni di ritorno specificate, a seconda che l'espressione booleana sia true
o false
.
Il $cond
accetta due sintassi:una sintassi a mano lunga e una sintassi a mano breve. Di seguito sono riportati alcuni esempi.
Esempio
Supponiamo di avere una collezione chiamata pets
con il seguente documento:
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Sintassi a mano lunga
Ecco un esempio di applicazione di $cond
a quel documento usando la sintassi a mano lunga:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Risultato:
{ "isCanine" : "Yes" }
In questo esempio, abbiamo confrontato il type
campo a un valore letterale.
Nell'esempio seguente, confrontiamo due campi all'interno del documento.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Risultato:
{ "bodyType" : "Skinny" }
Sintassi brevi
Il $cond
operatore accetta anche una sintassi abbreviata che rende il codice più conciso.
L'abbreviazione consiste sostanzialmente nella rimozione di if
, then
e else
parole chiave.
Quando lo fai, devi racchiudere le espressioni in un array.
In questo esempio, riscriviamo il primo esempio per utilizzare la sintassi abbreviata:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Risultato:
{ "isCanine" : "Yes" }
Ed ecco il secondo esempio usando la stenografia:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Risultato:
{ "bodyType" : "Skinny" }