Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Cosmos DB (i Azure och Fabric) stöder en omfattande uppsättning operatorer som gör att du kan utföra komplexa frågor och datamanipuleringar. Dessa operatorer omfattar bitvis, likhet och jämförelse, logiska operatorer och ternary-/sammanslagningsoperatorer, som var och en har specifika syften vid frågekonstruktion och databearbetning.
Bitvisa operatörer
Bitvis-operatorer är användbara för att utföra åtgärder på låg nivå på heltalsvärden när du skapar JSON-resultatuppsättningar. Dessa operatorer fungerar på samma sätt som liknande operatorer i programmeringsspråk på högre nivå som C# och JavaScript. Exempel på bitvis C#-operatorer finns i Bitwise- och skiftoperatorer.
I följande tabell beskrivs de bitvisa åtgärder som stöds i API:et för NoSQL:
| Verksamhet | Operator | Description |
|---|---|---|
| Vänster skift | << |
Flytta det vänstra värdet till vänster med det angivna antalet bitar. |
| Höger skift | >> |
Flytta vänster värde åt höger med det angivna antalet bitar. |
| Högerskift med noll fyllning (osignerad) | >>> |
Flytta vänster värde åt höger med det angivna antalet bitar utan att fylla i de flesta bitar till vänster. |
| och | & |
Beräknar bitvis logisk AND. |
| OR | | |
Beräknar bitvis logisk OR. |
| XOR | ^ |
Beräknar bitvis logisk exklusiv OR. |
Example
Följande fråga visar varje bitvis operator:
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
Den här frågan returnerar följande resultat:
[
{
"rightShift": 25,
"leftShift": 400,
"zeroFillRightShift": 100,
"logicalAnd": 96,
"logicalOr": 1004,
"logicalExclusiveOr": 908
}
]
Viktigt!
Bitvisoperatorerna i Cosmos DB följer samma beteende som bitvis-operatorer i JavaScript. JavaScript lagrar tal som 64 bitars flyttalsnummer, men alla bitvis åtgärder utförs på 32-bitars binära tal. Innan en bitvis åtgärd utförs konverterar JavaScript tal till 32 bitars signerade heltal. När bitvis-åtgärden har utförts konverteras resultatet tillbaka till 64-bitars JavaScript-nummer. Mer information om bitvis-operatorerna i JavaScript finns i JavaScript-binära bitvisoperatorer på Mozilla Developer Network (MDN) Web Docs.
Likhets- och jämförelseoperatorer
Likhets- och jämförelseoperatorer kontrollerar två uttryck för likvärdighet eller jämför dem relationellt. I följande tabell visas resultatet av likhetsjämförelser mellan två JSON-typer i API:et för NoSQL:
| Odefinierad | Null | Boolean | Nummer | String | Object | Array | |
|---|---|---|---|---|---|---|---|
| Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad |
| Noll | Odefinierad | Ok | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad |
| Boolean | Odefinierad | Odefinierad | Ok | Odefinierad | Odefinierad | Odefinierad | Odefinierad |
| Nummer | Odefinierad | Odefinierad | Odefinierad | Ok | Odefinierad | Odefinierad | Odefinierad |
| Sträng | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Ok | Odefinierad | Odefinierad |
| Objekt | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Ok | Odefinierad |
| Array | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Odefinierad | Ok |
För jämförelseoperatorer som >``, >=, `!=, <``, and <=, comparison across types or between two objects or arrays produces `undefined. Om resultatet av det skalära uttrycket är undefined``, the item isn't included in the result, because odefinieratdoesn't equate tosant''.
Example
I följande fråga jämförs ett tal- och strängvärde, vilket ger "odefinierat". Filtret innehåller därför inga resultat:
SELECT
*
FROM
products p
WHERE
0 = "true"
Logiska operatorer
Logiska operatorer jämför två uttryck med booleska (true/false) operander. I följande avsnitt beskrivs sanningstabellerna och prioriteten för varje logisk operator.
OR-operatorn
Operatorn OR returnerar true när något av villkoren är "true".
true |
false |
undefined |
|
|---|---|---|---|
true |
true |
true |
true |
false |
true |
false |
undefined |
undefined |
true |
undefined |
undefined |
OCH-operator
Operatorn AND returnerar true när båda uttrycken är "true".
true |
false |
undefined |
|
|---|---|---|---|
true |
true |
false |
undefined |
false |
false |
false |
false |
undefined |
undefined |
false |
undefined |
NOT-operatorn
Operatorn NOT ändrar värdet för ett booleskt uttryck.
NOT |
|
|---|---|
true |
false |
false |
true |
undefined |
undefined |
Operatorernas prioritet
De logiska operatorerna OR``, AND' och NOT har följande prioritetsnivåer:
| Operator | Priority |
|---|---|
NOT |
1 |
AND |
2 |
OR |
3 |
Projektionsoperator
Specialoperatorn * projicerar hela objektet som det är. När det används måste det vara det enda projekterade fältet. En fråga som SELECT * FROM products p är giltig, men SELECT VALUE * FROM products p eller SELECT *, p.id FROM products p är inte giltig.
Ternära- och sammanslagningsoperatörer
Operatorerna Ternary och coalesce utvärderar uttryck och returnerar resultat baserat på booleska operander eller fältexistens. Dessa operatorer fungerar på samma sätt som liknande operatorer i 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 baserat på utvärderingen av ett booleskt uttryck.
Syntax
<bool_expr> ?
<expr_true> :
<expr_false>
Arguments
| Description | |
|---|---|
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. |
Examples
I det här exemplet används objekt i en container som innehåller flera metadataegenskaper relaterade till priser. Egenskapen collapsible 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 onSale uttrycket, vilket motsvarar 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
Den här frågan returnerar:
[
{
"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 (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
Den här frågan returnerar:
[
{
"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.
Example
Den här frågan förutsätter att alla objekt där collapsible egenskapen inte finns inte är komprimerbara:
SELECT
p.name,
p.collapsible ?? false AS isCollapsible
FROM
products p