Azure Cosmos DB for NoSQL の三項演算子と合体演算子
適用対象: NoSQL
Azure Cosmos DB for NoSQL の三項演算子と合体演算子は、式を評価し、ブール型のオペランドに応じて、またはフィールドが存在する場合に結果を返します。 三項演算子と合体演算子はどちらも、C# や JavaScript などの一般的なプログラミング言語と同様に機能します。 三項 (?
) 演算子と合体 (??
) 演算子を使用して、半構造化されたデータや混合型のデータに対して回復性のある条件式を作成します。
三項演算子
?
演算子は、最初の式の評価に応じて値を返します。
構文
<bool_expr> ?
<expr_true> :
<expr_false>
引数
説明 | |
---|---|
bool_expr |
ブール式。 |
expr_true |
bool_expr が true に評価されるかどうかを評価する式。 |
expr_false |
bool_expr が false に評価されるかどうかを評価する式。 |
例
コンテナー内の次の項目について考えてみます。 価格に関連する複数のメタデータ プロパティが含まれており、プロパティの 1 つはすべての項目に存在しません。
[
{
"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
と同等です。 その後クエリは、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
}
]
また、?
演算子への呼び出しを入れ子にすることもできます。 この例では、2 番目のプロパティ (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