Поделиться через


Операторы ternary и объединения в Azure Cosmos DB для NoSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Операторы ternary и объединения в Azure Cosmos DB для NoSQL вычисляют выражения и возвращают результат в зависимости от логического операнда или поля. Операторы тернари и объединения работают аналогично популярным языкам программирования, таким как C# и JavaScript. Используйте ternary () и операторы объединения (???) для создания условных выражений, устойчивых к полуструктурированных или смешанных данных.

Тернарный оператор

Оператор ? возвращает значение в зависимости от оценки первого выражения.

Синтаксис

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Аргументы

Description
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. Затем запрос возвращает цену, умноженную на 0.85 то, если true или цена без изменений 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