Dela via


Ternary- och sammanslödningsoperatorer i Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

Operatorerna Ternary och coalesce i Azure Cosmos DB for NoSQL utvärderar uttryck och returnerar ett resultat beroende på en boolesk operand eller om det finns ett fält. Både operatorerna ternary och coalesce fungerar på samma sätt som populära programmeringsspråk som C# och JavaScript. Använd operatorerna ternary (?) och coalesce (??) för att skapa villkorsuttryck som är motståndskraftiga mot halvstrukturerade eller blandade data.

Operatorn Ternary

Operatorn ? returnerar ett värde beroende på utvärderingen av det första uttrycket.

Syntax

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Argument

beskrivning
bool_expr Ett booleskt uttryck.
expr_true Uttrycket som ska utvärderas om bool_expr utvärderas till true.
expr_false Uttrycket som ska utvärderas om bool_expr utvärderas till false.

Exempel

Tänk på de här objekten i en container. De innehåller flera metadataegenskaper relaterade till priser och en av egenskaperna finns inte på alla objekt.

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

Den här frågan utvärderar uttrycket onSale, som motsvarar onSale = true. Frågan returnerar sedan priset multiplicerat 0.85 med om true eller priset oförändrat om 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
  }
]

Du kan också kapsla anrop till operatorn ? . Det här exemplet lägger till en extra beräkning baserat på en andra egenskap (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
  }
]

Precis som med andra frågeoperatorer exkluderar operatorn ? objekt om de refererade egenskaperna saknas eller om de typer som jämförs skiljer sig.

Coalesce-operator

Använd operatorn ?? för att effektivt söka efter en egenskap i ett objekt när du kör frågor mot halvstrukturerade eller blandade data.

Den här frågan förutsätter till exempel att alla objekt där egenskapen collapsible inte finns inte är komprimerbara.

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