Condividi tramite


Operatori ternari e coalesce in Azure Cosmos DB per NoSQL

SI APPLICA A: NoSQL

Gli operatori ternari e coalesce in Azure Cosmos DB per NoSQL valutano le espressioni e restituiscono un risultato a seconda di un operando booleano o se esiste un campo. Sia gli operatori ternari che gli operatori coalesce funzionano in modo analogo ai linguaggi di programmazione più diffusi, ad esempio C# e JavaScript. Usare gli operatori ternari (?) e coalesce () per?? creare espressioni condizionali resilienti rispetto ai dati semistrutturati o misti.

Operatore ternario

L'operatore ? restituisce un valore a seconda della valutazione della prima espressione.

Sintassi

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Argomenti

Descrizione
bool_expr Espressione booleana.
expr_true Espressione da valutare se bool_expr restituisce true.
expr_false Espressione da valutare se bool_expr restituisce false.

Esempi

Considerare questi elementi in un contenitore. Contengono più proprietà di metadati correlate ai prezzi e una delle proprietà non esiste in tutti gli elementi.

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

Questa query valuta l'espressione onSale, equivalente a onSale = true. La query restituisce quindi il prezzo moltiplicato per 0.85 se true o il prezzo invariato 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
  }
]

È anche possibile annidare le chiamate all'operatore ? . In questo esempio viene aggiunto un calcolo aggiuntivo basato su una seconda proprietà (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
  }
]

Come con altri operatori di query, l'operatore ? esclude gli elementi se le proprietà a cui si fa riferimento sono mancanti o i tipi confrontati sono diversi.

Operatore Coalesce

Usare l'operatore per verificare in modo efficiente la presenza di una proprietà in un elemento durante l'esecuzione ?? di query su dati semistrutturati o di tipo misto.

Ad esempio, questa query presuppone che qualsiasi elemento in cui la proprietà collapsible non sia presente, non sia compresso.

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