MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $cond

Dans MongoDB, le $cond l'opérateur de pipeline d'agrégation évalue une expression booléenne et renvoie l'une des deux expressions de retour spécifiées, selon que l'expression booléenne est true ou false .

Le $cond L'opérateur accepte deux syntaxes :une syntaxe longue et une syntaxe courte. Des exemples de chacun sont ci-dessous.

Exemple

Supposons que nous ayons une collection appelée pets avec le document suivant :

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

Syntaxe longue

Voici un exemple d'application de $cond à ce document en utilisant la syntaxe longue :

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

Résultat :

{ "isCanine" : "Yes" }

Dans cet exemple, nous avons comparé le type champ à une valeur littérale.

Dans l'exemple suivant, nous comparons deux champs dans le document.

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

Résultat :

{ "bodyType" : "Skinny" }

Syntaxe abrégée

Le $cond accepte également une syntaxe abrégée qui rend votre code plus concis.

Le raccourci consiste essentiellement à supprimer le if , then , et else mots-clés.

Lorsque vous faites cela, vous devez enfermer les expressions dans un tableau.

Dans cet exemple, nous réécrivons le premier exemple pour utiliser la syntaxe abrégée :

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

Résultat :

{ "isCanine" : "Yes" }

Et voici le deuxième exemple utilisant la sténographie :

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

Résultat :

{ "bodyType" : "Skinny" }