Ternary i łączenie operatorów w usłudze Azure Cosmos DB for NoSQL
DOTYCZY: NoSQL
Operatory Ternary i łączą operatory w usłudze Azure Cosmos DB for NoSQL ocenia wyrażenia i zwraca wynik w zależności od argumentu logicznego lub jeśli istnieje pole. Zarównoternary, jak i coalesce operatory działają podobnie do popularnych języków programowania, takich jak C# i JavaScript. Użyjternary (?
) i łączenie operatorów (??
) w celu utworzenia wyrażeń warunkowych odpornych na dane częściowo ustrukturyzowane lub mieszane.
Operator Ternary
Operator ?
zwraca wartość w zależności od oceny pierwszego wyrażenia.
Składnia
<bool_expr> ?
<expr_true> :
<expr_false>
Argumenty
opis | |
---|---|
bool_expr |
Wyrażenie logiczne. |
expr_true |
Wyrażenie, które ma ocenić, czy bool_expr wartość jest obliczana na true wartość . |
expr_false |
Wyrażenie, które ma ocenić, czy bool_expr wartość jest obliczana na false wartość . |
Przykłady
Rozważ te elementy w kontenerze. Zawierają one wiele właściwości metadanych związanych z ceną, a jedna z właściwości nie istnieje we wszystkich elementach.
[
{
"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
}
]
To zapytanie oblicza wyrażenie onSale
, które jest równoważne .onSale = true
Następnie zapytanie zwraca cenę pomnożną przez 0.85
wartość if true
lub cenę niezmienioną, jeśli false
.
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
}
]
Można również zagnieżdżać wywołania operatora ?
. W tym przykładzie dodano dodatkowe obliczenia na podstawie drugiej właściwości (taxFree
)
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
}
]
Podobnie jak w przypadku innych operatorów zapytań, operator wyklucza elementy, ?
jeśli brakuje przywoływane właściwości lub porównywane typy są różne.
Operator coalesce
Operator umożliwia ??
efektywne sprawdzanie właściwości w elemencie podczas wykonywania zapytań dotyczących danych częściowo ustrukturyzowanych lub mieszanych.
Na przykład to zapytanie zakłada, że każdy element, w którym właściwość collapsible
nie jest obecna, nie jest zwijany.
SELECT
p.name,
p.collapsible ?? false AS isCollapsible
FROM
products p