Operátory – dotazovací jazyk ve službě Cosmos DB (v Azure a prostředcích infrastruktury)

Cosmos DB (v Azure a Fabric) podporuje komplexní sadu operátorů, které umožňují provádět složité dotazy a manipulace s daty. Mezi tyto operátory patří bitové operátory, rovnost a porovnání, logické a ternární/sloučící operátory, z nichž každá obsluhuje konkrétní účely při vytváření dotazů a zpracování dat.

bitové operátory

Bitové operátory jsou užitečné pro provádění operací nízké úrovně s celočíselnou hodnotou při vytváření sad výsledků JSON. Tyto operátory fungují podobně jako podobné operátory v programovacích jazycích vyšší úrovně, jako jsou C# a JavaScript. Příklady bitové operátory jazyka C# najdete v tématu Bitové operátory a operátory posunu.

Následující tabulka popisuje bitové operace podporované v rozhraní API pro NoSQL:

Operation Operator Description
Levý posun << Posun hodnoty doleva o zadaný počet bitů.
Posun doprava >> Posun hodnoty doleva doprava o zadaný počet bitů.
Posun doprava bez znaménka (bez znaménka) >>> Posun hodnoty doleva doprava o zadaný počet bitů bez vyplnění bitů zleva nejvíce.
A & Vypočítá bitový logický operátor AND.
OR | Vypočítá bitový logický operátor OR.
XOR ^ Vypočítá bitový logický exkluzivní operátor OR.

Example

Následující dotaz ukazuje jednotlivé bitové operátory:

SELECT 
    (100 >> 2) AS rightShift,
    (100 << 2) AS leftShift,
    (100 >>> 0) AS zeroFillRightShift,
    (100 & 1000) AS logicalAnd,
    (100 | 1000) AS logicalOr,
    (100 ^ 1000) AS logicalExclusiveOr

Tento dotaz vrátí následující výsledky:

[
  {
    "rightShift": 25,
    "leftShift": 400,
    "zeroFillRightShift": 100,
    "logicalAnd": 96,
    "logicalOr": 1004,
    "logicalExclusiveOr": 908
  }
]

Důležité

Bitové operátory ve službě Cosmos DB se řídí stejným chováním jako bitové operátory v JavaScriptu. JavaScript ukládá čísla jako 64 bitů s plovoucí desetinou čárkou, ale všechny bitové operace se provádějí na 32bitových binárních číslech. Před provedením bitové operace JavaScript převede čísla na 32 bitů s celými čísly. Po provedení bitové operace se výsledek převede zpět na 64bitová čísla JavaScriptu. Další informace o bitové operátory v JavaScriptu naleznete v javascriptových binárních bitové operátory na webu Docs mozilla Developer Network (MDN).

Operátory rovnosti a porovnání

Operátory rovnosti a porovnání kontrolují dva výrazy pro ekvivalenci nebo je porovnávají relačním vztahem. Následující tabulka ukazuje výsledek porovnání rovnosti mezi libovolnými dvěma typy JSON v rozhraní API pro NoSQL:

nedefinované Null logický Number String Object Array
nedefinované Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný
Nula Nedefinovaný ok Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný
Booleova logika Nedefinovaný Nedefinovaný ok Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný
Číslo Nedefinovaný Nedefinovaný Nedefinovaný ok Nedefinovaný Nedefinovaný Nedefinovaný
Řetězec Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný ok Nedefinovaný Nedefinovaný
Objekt Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný ok Nedefinovaný
Pole Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný Nedefinovaný ok

Pro relační operátory, jako >``, >, `!=je =, <``, and <=., comparison across types or between two objects or arrays produces `undefined Pokud je undefined``, the item isn't included in the result, because výsledek skalárního výrazu nedefinovanýdoesn't equate totrue'.

Example

Následující dotaz porovná hodnotu čísla a řetězce, která vytvoří nedefinovanou hodnotu. Proto filtr neobsahuje žádné výsledky:

SELECT
    *
FROM
    products p
WHERE 
    0 = "true"

Logické operátory

Logické operátory porovnávají dva výrazy s logickými operandy (true/false). Následující části popisují tabulky pravdy a prioritu pro každý logický operátor.

Operátor OR

Operátor OR se vrátí true , pokud je některou z podmínek pravda.

true false undefined
true true true true
false true false undefined
undefined true undefined undefined

Operátor AND

Operátor AND se vrátí true , když oba výrazy jsou true.

true false undefined
true true false undefined
false false false false
undefined undefined false undefined

Operátor NOT

Operátor NOT obrátí hodnotu libovolného logického výrazu.

NOT
true false
false true
undefined undefined

Priorita operátorů

Logické operátory OR``, AND" a NOT mají následující úrovně priority:

Operator Priority
NOT 1
AND 2
OR 3

Operátor projekce

Speciální operátor * projektuje celou položku tak, jak je. Při použití musí být jediným projektovaným polem. Dotaz je SELECT * FROM products p platný, ale SELECT VALUE * FROM products p nebo SELECT *, p.id FROM products p není platný.

Ternární a slučovací operátory

Operátory Ternary a coalesce vyhodnocují výrazy a vrací výsledky na základě logických operandů nebo existence pole. Tyto operátory fungují podobně jako podobné operátory v oblíbených programovacích jazycích, jako jsou C# a JavaScript. Pomocí ternárních operátorů (?) a coalesce (??) můžete vytvářet podmíněné výrazy odolné vůči částečně strukturovaným nebo smíšeným datům.

Ternární operátor

Operátor ? vrátí hodnotu na základě vyhodnocení logického výrazu.

Syntaxe

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Arguments

Description
bool_expr Logický výraz.
expr_true Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako true.
expr_false Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako false.

Examples

Tento příklad používá položky v kontejneru, které obsahují více vlastností metadat souvisejících s cenami. Vlastnost collapsible neexistuje u všech položek:

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

Tento dotaz vyhodnotí onSale výraz, který odpovídá hodnotě onSale = true``. The query returns the price multiplied by 0,85iftrue, or the price unchanged if `false:

SELECT
    p.name,
    p.price AS subtotal,
    p.onSale ? (p.price * 0.85) : p.price AS total
FROM
    products p

Tento dotaz vrátí:

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

Můžete také vnořit volání operátora ? . Tento příklad přidá další výpočet na základě druhé vlastnosti (onCloseout):

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

Tento dotaz vrátí:

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

Stejně jako u jiných operátorů dotazu operátor vyloučí položky, ? pokud odkazované vlastnosti chybí nebo jsou porovnávané typy odlišné.

Operátor Coalesce

?? Operátor slouží k efektivní kontrole vlastnosti v položce při dotazování na částečně strukturovaná nebo smíšená data typu.

Example

Tento dotaz předpokládá, že jakákoli položka, ve collapsible které není vlastnost, není sbalitelná:

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