次の方法で共有


Azure Cosmos DB for NoSQL の三項演算子と合体演算子

適用対象: NoSQL

Azure Cosmos DB for NoSQL の三項演算子と合体演算子は、式を評価し、ブール型のオペランドに応じて、またはフィールドが存在する場合に結果を返します。 三項演算子と合体演算子はどちらも、C# や JavaScript などの一般的なプログラミング言語と同様に機能します。 三項 (?) 演算子と合体 (??) 演算子を使用して、半構造化されたデータや混合型のデータに対して回復性のある条件式を作成します。

三項演算子

? 演算子は、最初の式の評価に応じて値を返します。

構文

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

引数

説明
bool_expr ブール式。
expr_true bool_exprtrue に評価されるかどうかを評価する式。
expr_false bool_exprfalse に評価されるかどうかを評価する式。

コンテナー内の次の項目について考えてみます。 価格に関連する複数のメタデータ プロパティが含まれており、プロパティの 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