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