No MongoDB, o
$cond
operador de pipeline de agregação avalia uma expressão booleana e retorna uma das duas expressões de retorno especificadas, dependendo se a expressão booleana é true
ou false
. O
$cond
O operador aceita duas sintaxes:uma sintaxe longa e uma sintaxe abreviada. Exemplos de cada um estão abaixo. Exemplo
Suponha que tenhamos uma coleção chamada
pets
com o seguinte documento:{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Sintaxe à mão longa
Aqui está um exemplo de aplicação de
$cond
para esse documento usando a sintaxe longa:db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Resultado:
{ "isCanine" : "Yes" }
Neste exemplo, comparamos o
type
campo para um valor literal. No exemplo a seguir, comparamos dois campos dentro do documento.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Resultado:
{ "bodyType" : "Skinny" }
Sintaxe abreviada
O
$cond
O operador também aceita uma sintaxe abreviada que torna seu código mais conciso. A abreviação basicamente envolve a remoção do
if
, then
, e else
palavras-chave. Ao fazer isso, você precisa colocar as expressões em uma matriz.
Neste exemplo, reescrevemos o primeiro exemplo para usar a sintaxe abreviada:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Resultado:
{ "isCanine" : "Yes" }
E aqui está o segundo exemplo usando abreviação:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Resultado:
{ "bodyType" : "Skinny" }