適用於 NoSQL 的 Azure Cosmos DB 中的三元運算子和聯合運算符
適用於:NoSQL
適用於 NoSQL 的 Azure Cosmos DB 中的三元運算符會評估表達式,並根據布爾操作數或字段存在,傳回結果。 三元運算符和聯合運算子的功能與 C# 和 JavaScript 等熱門程式設計語言類似。 使用三元 () 和聯合運算符?
??
來建置可針對半結構化或混合型別數據具有復原性的條件表達式。
三元運算子
運算子 ?
會根據第一個表達式的評估傳回值。
語法
<bool_expr> ?
<expr_true> :
<expr_false>
引數
描述 | |
---|---|
bool_expr |
布爾表達式。 |
expr_true |
評估是否 bool_expr 評估為 true 的表達式。 |
expr_false |
評估是否 bool_expr 評估為 false 的表達式。 |
範例
請考慮容器中的這些專案。 它們包含多個與定價相關的元數據屬性,而且其中一個屬性不存在於所有專案上。
[
{
"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
}
]
此查詢會評估表示式 onSale
,其相當於 onSale = true
。 然後,查詢會傳回乘以 if true
的價格0.85
,如果 為 ,則傳回價格不變。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
}
]
您也可以巢狀呼叫 ?
運算符。 此範例會根據第二個屬性新增額外的計算 (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
}
]
與其他查詢運算符一樣,如果遺漏參考的屬性或要比較的類型不同, ?
運算元就會排除專案。
聯合運算子
??
針對半結構化或混合類型數據進行查詢時,請使用 運算符有效率地檢查專案中的屬性。
例如,此查詢假設屬性不存在的任何專案 collapsible
都無法折疊。
SELECT
p.name,
p.collapsible ?? false AS isCollapsible
FROM
products p