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