Freigeben über


Ternäre und koaleszierte Operatoren in Azure Cosmos DB for NoSQL

GILT FÜR: NoSQL

Ternäre und koaleszierte Operatoren in Azure Cosmos DB for NoSQL werten Ausdrücke aus und geben – je nach einem booleschen Operanden oder ob ein Feld vorhanden ist – ein Ergebnis zurück. Sowohl die ternären als auch die koaleszierten Operatoren funktionieren ähnlich wie gängige Programmiersprachen wie C# und JavaScript. Verwenden Sie die ternären (?) und koaleszierten (??) Operatoren zum Erstellen von bedingten Ausdrücken, die gegenüber semistrukturierten oder gemischten Daten resilient sind.

Ternärer Operator

Der Operator ? gibt abhängig von der Auswertung des ersten Ausdrucks einen Wert zurück.

Syntax

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Argumente

Beschreibung
bool_expr Ein boolescher Ausdruck.
expr_true Der auszuwertende Ausdruck, wenn bool_expr in true ausgewertet wird.
expr_false Der auszuwertende Ausdruck, wenn bool_expr in false ausgewertet wird.

Beispiele

Betrachten Sie diese Elemente in einem Container. Sie enthalten mehrere Metadateneigenschaften, die sich auf die Preise beziehen, und eine der Eigenschaften gibt es nicht für alle Elemente.

[
  {
    "name": "Stangincy trekking poles",
    "price": 24.50,
    "onCloseout": false,
    "onSale": true,
    "collapsible": true
  },
  {
    "name": "Vimero hiking poles",
    "price": 24.50,
    "onCloseout": false,
    "onSale": false
  },
  {
    "name": "Kramundsen trekking poles",
    "price": 24.50,
    "onCloseout": true,
    "onSale": true,
    "collapsible": false
  }
]

Diese Abfrage wertet den Ausdruck onSale aus, der onSale = true entspricht. Die Abfrage gibt dann den Preis (multipliziert mit 0.85) zurück, wenn true zutrifft, oder den Preis unverändert zurück, wenn false zutrifft.

SELECT
    p.name,
    p.price AS subtotal,
    p.onSale ? (p.price * 0.85) : p.price AS total
FROM
    products p
[
  {
    "name": "Stangincy trekking poles",
    "subtotal": 24.5,
    "total": 20.825
  },
  {
    "name": "Vimero hiking poles",
    "subtotal": 24.5,
    "total": 24.5
  },
  {
    "name": "Kramundsen trekking poles",
    "subtotal": 24.5,
    "total": 20.825
  }
]

Sie können auch Aufrufe des Operators ? schachteln. In diesem Beispiel wird eine zusätzliche Berechnung basierend auf einer zweiten Eigenschaft (taxFree) hinzugefügt.

SELECT
    p.name,
    p.price AS subtotal,
    p.onCloseout ? (p.price * 0.55) : p.onSale ? (p.price * 0.85) : p.price AS total
FROM
    products p
[
  {
    "name": "Stangincy trekking poles",
    "subtotal": 24.5,
    "total": 20.825
  },
  {
    "name": "Vimero hiking poles",
    "subtotal": 24.5,
    "total": 24.5
  },
  {
    "name": "Kramundsen trekking poles",
    "subtotal": 24.5,
    "total": 13.475000000000001
  }
]

Wie bei anderen Abfrageoperatoren schließt der Operator ? Elemente aus, wenn die referenzierten Eigenschaften fehlen oder unterschiedliche Typen miteinander verglichen werden.

Coalesce-Operator

Verwenden Sie den Operator ?? bei Abfragen für teilweise strukturierte oder gemischte Datentypen zur effizienten Prüfung des Vorkommens einer Eigenschaft in einem Element.

Bei dieser Abfrage beispielsweise wird davon ausgegangen, dass ein Element, in dem es die Eigenschaft collapsible nicht gibt, nicht reduzierbar ist.

SELECT
    p.name,
    p.collapsible ?? false AS isCollapsible
FROM
    products p