En MongoDB, el $cond
El operador de canalización de agregación evalúa una expresión booleana y devuelve una de las dos expresiones de retorno especificadas, dependiendo de si la expresión booleana es true
o false
.
El $cond
El operador acepta dos sintaxis:una sintaxis abreviada y una sintaxis abreviada. A continuación se muestran ejemplos de cada uno.
Ejemplo
Supongamos que tenemos una colección llamada pets
con el siguiente documento:
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Sintaxis manual
Aquí hay un ejemplo de cómo aplicar $cond
a ese documento usando la sintaxis manuscrita:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Resultado:
{ "isCanine" : "Yes" }
En este ejemplo, comparamos el type
campo a un valor literal.
En el siguiente ejemplo, comparamos dos campos dentro del documento.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Resultado:
{ "bodyType" : "Skinny" }
Sintaxis abreviada
El $cond
operator también acepta una sintaxis abreviada que hace que su código sea más conciso.
La taquigrafía básicamente consiste en eliminar el if
, then
y else
palabras clave.
Cuando haga esto, necesita encerrar las expresiones en una matriz.
En este ejemplo, reescribimos el primer ejemplo para usar la sintaxis abreviada:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Resultado:
{ "isCanine" : "Yes" }
Y aquí está el segundo ejemplo usando taquigrafía:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Resultado:
{ "bodyType" : "Skinny" }