Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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