MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ cond

In MongoDB, il $cond l'operatore della pipeline di aggregazione valuta un'espressione booleana e restituisce una delle due espressioni di ritorno specificate, a seconda che l'espressione booleana sia true o false .

Il $cond accetta due sintassi:una sintassi a mano lunga e una sintassi a mano breve. Di seguito sono riportati alcuni esempi.

Esempio

Supponiamo di avere una collezione chiamata pets con il seguente documento:

{
	"_id" : 1,
	"name" : "Fetch",
	"type" : "Dog",
	"weight" : 20,
	"height" : 30
}

Sintassi a mano lunga

Ecco un esempio di applicazione di $cond a quel documento usando la sintassi a mano lunga:

db.pets.aggregate(
  [
    { $project: { 
        _id: 0,
        isCanine: { 
          $cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
          }
      }
    }
  ]
)

Risultato:

{ "isCanine" : "Yes" }

In questo esempio, abbiamo confrontato il type campo a un valore letterale.

Nell'esempio seguente, confrontiamo due campi all'interno del documento.

db.pets.aggregate(
  [
    { $project: { 
        _id: 0,
        bodyType: { 
          $cond: { 
            if: { 
              $gte: [ "$weight", "$height" ] }, 
              then: "Fat", 
              else: "Skinny" 
              }
          }
      }
    }
  ]
)

Risultato:

{ "bodyType" : "Skinny" }

Sintassi brevi

Il $cond operatore accetta anche una sintassi abbreviata che rende il codice più conciso.

L'abbreviazione consiste sostanzialmente nella rimozione di if , then e else parole chiave.

Quando lo fai, devi racchiudere le espressioni in un array.

In questo esempio, riscriviamo il primo esempio per utilizzare la sintassi abbreviata:

db.pets.aggregate(
  [
    { $project: { 
        _id: 0,
        isCanine: { 
          $cond: [ { "$type": "Dog" }, "Yes", "No" ]
          }
      }
    }
  ]
)

Risultato:

{ "isCanine" : "Yes" }

Ed ecco il secondo esempio usando la stenografia:

db.pets.aggregate(
  [
    { $project: { 
        _id: 0,
        bodyType: { 
          $cond: [
              { $gte: [ "$weight", "$height" ] }, 
              "Fat", 
              "Skinny" 
              ]
          }
      }
    }
  ]
)

Risultato:

{ "bodyType" : "Skinny" }