Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 boolean en. Si el resultado no boolean es, se convierte a un valor booleano. Puede encontrar más información sobre cómo MongoDB evalúa las expresiones como verdaderas o falsas 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 falle con un $switch 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

$subtract

En esta página