Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$switch (operador de expresión)

$switch

Evalúa una serie de expresiones de casos. Cuando encuentra una expresión que se evalúa como true, $switch ejecuta una expresión especificada y sale del flujo de control.

$switch tiene la siguiente sintaxis:

$switch: {
branches: [
{ case: <expression>, then: <expression> },
{ case: <expression>, then: <expression> },
...
],
default: <expression>
}

Los objetos en el arreglo branches deben contener únicamente un campo case y un campo then.

Operando
Descripción

branches

Un arreglo de documentos de la sucursal control. Cada rama es un documento con los siguientes campos:

  • case
    Puede ser cualquier valor válido expresión que se resuelve en un boolean. Si el resultado no es un boolean, se convierte en un valor booleano. Más información sobre cómo MongoDB evalúa las expresiones como verdaderas o falsas se puede encontrar aquí.
  • then
    Puede ser cualquier expresión válida.

El arreglo branches debe contener al menos un documento de sucursal.

default

opcional. La ruta a seguir si ninguna expresión de rama case evalúa a true.

Aunque es opcional, si default no se especifica y ninguna rama case evalúa como verdadera, $switch devuelve un error.

Las diversas instrucciones de caso no necesitan ser mutuamente exclusivas. $switch ejecuta la primera rama que encuentra que se evalúa en true. Si ninguna de las ramas se evalúa como verdadera, $switch ejecuta la opción default.

Las siguientes condiciones hacen que $switch falle con un error:

  • El campo branches falta o no es un arreglo con al menos una entrada.

  • Un objeto en el arreglo branches no contiene un campo case.

  • Un objeto en el arreglo branches no contiene un campo then.

  • Un objeto en el arreglo branches contiene un campo que no es case o then.

  • No se especifica default y ningún case evalúa true.

Ejemplo
Resultados
{
$switch: {
branches: [
{ case: { $eq: [ 0, 5 ] }, then: "equals" },
{ case: { $gt: [ 0, 5 ] }, then: "greater than" },
{ case: { $lt: [ 0, 5 ] }, then: "less than" }
]
}
}

"less than"

{
$switch: {
branches: [
{ case: { $eq: [ 0, 5 ] }, then: "equals" },
{ case: { $gt: [ 0, 5 ] }, then: "greater than" }
],
default: "Did not match"
}
}

"Did not match"

{
$switch: {
branches: [
{ case: "this is true", then: "first case" },
{ case: false, then: "second case" }
],
default: "Did not match"
}
}

"First case"

Una colección llamada grades contiene los siguientes documentos:

{ "_id" : 1, "name" : "Susan Wilkes", "scores" : [ 87, 86, 78 ] }
{ "_id" : 2, "name" : "Bob Hanna", "scores" : [ 71, 64, 81 ] }
{ "_id" : 3, "name" : "James Torrelio", "scores" : [ 91, 84, 97 ] }

La siguiente operación de agregación utiliza $switch para mostrar un mensaje específico basado en el puntaje promedio de cada estudiante.

db.grades.aggregate( [
{
$project:
{
"name" : 1,
"summary" :
{
$switch:
{
branches: [
{
case: { $gte : [ { $avg : "$scores" }, 90 ] },
then: "Doing great!"
},
{
case: { $and : [ { $gte : [ { $avg : "$scores" }, 80 ] },
{ $lt : [ { $avg : "$scores" }, 90 ] } ] },
then: "Doing pretty well."
},
{
case: { $lt : [ { $avg : "$scores" }, 80 ] },
then: "Needs improvement."
}
],
default: "No scores found."
}
}
}
}
] )

La operación devuelve lo siguiente:

{ "_id" : 1, "name" : "Susan Wilkes", "summary" : "Doing pretty well." }
{ "_id" : 2, "name" : "Bob Hanna", "summary" : "Needs improvement." }
{ "_id" : 3, "name" : "James Torrelio", "summary" : "Doing great!" }

Tip

Volver

$subtipo

En esta página