Partager via


Opérateurs ternaires et de fusion dans Azure Cosmos DB for NoSQL

S’APPLIQUE À : NoSQL

Les opérateurs ternaires et de fusion dans Azure Cosmos DB for NoSQL évaluent les expressions et retournent un résultat en fonction d’un opérande booléen ou de l’existence d’un champ. Les opérateurs ternaires et de fusion fonctionnent de la même manière que les langages de programmation populaires comme C# et JavaScript. Utilisez les opérateurs ternaires (?) et de fusion (??) pour créer des expressions conditionnelles résilientes contre des données semi-structurées ou mixtes.

Opérateur ternaire

L’opérateur ? retourne une valeur en fonction de l’évaluation de la première expression.

Syntaxe

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Arguments

Description
bool_expr Une expression booléenne.
expr_true L'expression qui évalue si bool_expr a la valeur true.
expr_false L'expression qui évalue si bool_expr a la valeur false.

Exemples

Considérez ces éléments dans un conteneur. Ils contiennent plusieurs propriétés de métadonnées liées à la tarification, et l’une des propriétés n’existe pas sur tous les éléments.

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

Cette requête évalue l’expression onSale, qui est équivalente à onSale = true. La requête retourne ensuite le prix multiplié par 0.85 si true ou le prix inchangé si 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
  }
]

Vous pouvez également imbriquer des appels à l’opérateur ?. Cet exemple montre comment ajouter un calcul supplémentaire basé sur une deuxième propriété (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
  }
]

De même que pour les autres opérateurs de requête, l’opérateur ? exclut des éléments si les propriétés référencées sont manquantes ou si les types comparés sont différents.

Opérateur de coalescence

Utilisez l’opérateur ?? pour vérifier efficacement la présence d’une propriété dans un élément quand la requête porte sur des données semi-structurées ou de type mixte.

Par exemple, cette requête suppose que tout élément dans lequel la propriété collapsible n’est pas présente n’est pas réductible.

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