Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

$switch (operador de expressão de agregação)

$switch

Avalia uma série de expressões de caso. Quando encontra uma expressão que avalia para true, o $switch executa uma expressão especificada e quebra o fluxo de controle.

$switch tem a seguinte sintaxe:

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

Os objetos na array branches devem conter somente um campo case e um campo then.

Operando
Descrição

branches

Uma array de documentos da ramificação de controle. Cada ramificação é um documento com os seguintes campos:

  • case
    Pode ser qualquer expressão válida que resolva para um boolean. Se o resultado não for um boolean, ele será forçado para um valor booleano. Mais informações sobre como o MongoDB avalia expressões como verdadeiro ou falso podem ser encontradas aqui.
  • then
    Pode ser qualquer expressão válida.

A array branches deve conter pelo menos um documento de ramificação.

default

Opcional. O caminho a ser seguido se nenhuma expressão de ramificação case for avaliada como true.

Embora seja opcional, se default não for especificado e nenhuma ramificação case for avaliada como verdadeira, $switch retornará um erro.

As várias declarações de caso não precisam ser mutuamente exclusivas. $switch executa a primeira ramificação que encontra e que é avaliada como true. Se nenhuma das ramificações for avaliada como verdadeira, $switch executará a opção default.

As condições a seguir fazem com que $switch falhe com um erro:

  • O campo branches está ausente ou não é uma array com pelo menos uma entrada.

  • Um objeto na array branches não contém um campo case.

  • Um objeto na array branches não contém um campo then.

  • Um objeto na array branches contém um campo diferente de case ou then.

  • Nenhum default é especificado e nenhum case é avaliado como true.

Exemplo
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"

O exemplo a seguir usa a coleção movies do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação, consulte Carregar o conjunto de dados de amostra.

Esta operação de agregação usa $switch para exibir uma mensagem específica com base na classificação de cada filme. O estágio $match limita os resultados aos três filmes mais longos no conjunto de dados de amostra:

db.movies.aggregate( [ { $match: { runtime: { $gt: 800 } } }, { $project: { _id: 0, title: 1, summary: { $switch: { branches: [ { case: { $gte: [ "$imdb.rating", 9 ] }, then: "Doing great!" }, { case: { $and: [ { $gte: [ "$imdb.rating", 8 ] }, { $lt: [ "$imdb.rating", 9 ] } ] }, then: "Doing pretty well." }, { case: { $lt: [ "$imdb.rating", 8 ] }, then: "Needs improvement." } ], default: "No rating found." } } } }, { $sort: { title: 1 } }] )
[ { title: 'Baseball', summary: 'Doing great!' }, { title: 'Centennial', summary: 'Doing pretty well.' }, { title: 'Taken', summary: 'Needs improvement.' }]

Dica

$cond

Avalie esta página