Compartilhar via


Operadores ternários e de coalescência no Azure Cosmos DB for NoSQL

APLICA-SE A: NoSQL

Os operadores ternários e de união no Azure Cosmos DB for NoSQL avaliam expressões e retornam um resultado dependendo de um operando booleano ou da existência de um campo. Os operadores ternário e de coalescência funcionam de forma semelhante às linguagens de programação populares, como C# e JavaScript. Use os operadores ternários (?) e de coalescência (??) para criar expressões condicionais que sejam resilientes em relação a dados semiestruturados ou de tipo misto.

Operador ternário

O operador ? retorna um valor dependendo da avaliação da primeira expressão.

Sintaxe

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Argumentos

Descrição
bool_expr Uma expressão booleana.
expr_true A expressão a ser avaliada se bool_expr for avaliada como true.
expr_false A expressão a ser avaliada se bool_expr for avaliada como false.

Exemplos

Considere esses itens em um contêiner. Eles contêm várias propriedades de metadados relacionadas a preços, e uma das propriedades não existe em todos os itens.

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

Essa consulta avalia a expressão onSale, que é equivalente a onSale = true. A consulta retorna o preço multiplicado por 0.85 se true ou o preço inalterado se 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
  }
]

Você também pode aninhar chamadas para o operador ?. Esse exemplo adiciona um cálculo extra com base em uma segunda propriedade (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
  }
]

Tal como acontece com outros operadores de consulta, o operador ? exclui itens se as propriedades referenciadas estiverem ausentes ou os tipos que estão sendo comparados forem diferentes.

Operador de união

Use o operador ?? para verificar com eficiência uma propriedade em um item ao consultar dados semiestruturados ou de tipo misto.

Por exemplo, essa consulta pressupõe que qualquer item em que a propriedade collapsible não esteja presente não é recolhível.

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