MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $cond

In MongoDB ist die $cond Der Aggregations-Pipeline-Operator wertet einen booleschen Ausdruck aus und gibt einen der beiden angegebenen Rückgabeausdrücke zurück, je nachdem, ob der boolesche Ausdruck true ist oder false .

Der $cond -Operator akzeptiert zwei Syntaxen:eine Langschrift-Syntax und eine Kurzschrift-Syntax. Beispiele dafür finden Sie unten.

Beispiel

Angenommen, wir haben eine Sammlung namens pets mit folgendem Dokument:

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

Langschrift-Syntax

Hier ist ein Beispiel für die Anwendung von $cond zu diesem Dokument mit der Langschrift-Syntax:

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

Ergebnis:

{ "isCanine" : "Yes" }

In diesem Beispiel haben wir den type verglichen Feld in einen Literalwert.

Im folgenden Beispiel vergleichen wir zwei Felder innerhalb des Dokuments.

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

Ergebnis:

{ "bodyType" : "Skinny" }

Kurzschriftsyntax

Der $cond Operator akzeptiert auch eine Kurzschreibweise, die Ihren Code prägnanter macht.

Die Abkürzung beinhaltet im Wesentlichen das Entfernen des if , then , und else Schlüsselwörter.

Wenn Sie dies tun, müssen Sie die Ausdrücke in ein Array einschließen.

In diesem Beispiel schreiben wir das erste Beispiel neu, um die Kurzschriftsyntax zu verwenden:

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

Ergebnis:

{ "isCanine" : "Yes" }

Und hier ist das zweite Beispiel mit Kurzschrift:

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

Ergebnis:

{ "bodyType" : "Skinny" }