sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $cond

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