Udostępnij za pośrednictwem


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 truewartość .
expr_false Wyrażenie, które ma ocenić, czy bool_expr wartość jest obliczana na falsewartość .

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