MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $cond


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