Sdílet prostřednictvím


Operátory Ternary a coalesce ve službě Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

Operátory Ternary a coalesce ve službě Azure Cosmos DB for NoSQL vyhodnocují výrazy a vrací výsledek v závislosti na logickém operandu nebo v případě, že pole existuje. Ternární i coalesce operátory fungují podobně jako oblíbené programovací jazyky, jako jsou C# a JavaScript. Pomocí ternárních operátorů (?) a coalesce (??) můžete vytvářet podmíněné výrazy odolné vůči částečně strukturovaným nebo smíšeným datům.

Ternární operátor

Operátor ? vrátí hodnotu v závislosti na vyhodnocení prvního výrazu.

Syntaxe

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Argumenty

Popis
bool_expr Logický výraz.
expr_true Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako true.
expr_false Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako false.

Příklady

Zvažte tyto položky v kontejneru. Obsahují více vlastností metadat souvisejících s cenami a jedna z vlastností neexistuje u všech položek.

[
  {
    "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
  }
]

Tento dotaz vyhodnotí výraz onSale, který je ekvivalentní onSale = true. Dotaz pak vrátí cenu vynásobenou 0.85 cenou, pokud true se cena nezmění, pokud 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
  }
]

Můžete také vnořit volání operátora ? . Tento příklad přidá výpočet navíc na základě druhé vlastnosti (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
  }
]

Stejně jako u jiných operátorů dotazu operátor vyloučí položky, ? pokud odkazované vlastnosti chybí nebo jsou porovnávané typy odlišné.

Operátor Coalesce

?? Operátor slouží k efektivní kontrole vlastnosti v položce při dotazování na částečně strukturovaná nebo smíšená data typu.

Tento dotaz například předpokládá, že jakákoli položka, ve které není vlastnost collapsible , není sbalitelná.

SELECT
    p.name,
    p.collapsible ?? false AS isCollapsible
FROM
    products p