Operators - Querytaal in Cosmos DB (in Azure en Fabric)

Cosmos DB (in Azure en Fabric) ondersteunt een uitgebreide set operators waarmee u complexe query's en gegevensbewerkingen kunt uitvoeren. Deze operators omvatten bitsgewijze, gelijkheid en vergelijking, logische en ternaire/samenvoegingsoperators, die elk specifieke doeleinden dienen bij het bouwen en verwerken van query's.

Bitsgewijze operatoren

Bitwise-operators zijn handig voor het uitvoeren van bewerkingen op laag niveau op gehele getallen bij het maken van JSON-resultatensets. Deze operators werken op dezelfde manier als vergelijkbare operators in programmeertalen op een hoger niveau, zoals C# en JavaScript. Zie Bitwise- en shiftoperators voor voorbeelden van C#-bits operatoren.

In de volgende tabel worden de bitsgewijze bewerkingen beschreven die worden ondersteund in de API voor NoSQL:

Operation Operator Description
Shift links << Shift left-value left by the specified number of bits.
Shift rechts >> Shift left-value right by the specified number of bits.
Nulopvulling (niet-ondertekende) rechter shift >>> Shift left-value right by the specified number of bits without filling left-most bits.
EN & Berekent bitsgewijze logische AND.
OR | Berekent bitsgewijze logische OR.
XOR ^ Berekent bitwise logische exclusieve OR.

Example

De volgende query demonstreert elke bitsgewijze 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

Deze query retourneert de volgende resultaten:

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

Belangrijk

De bitsgewijze operators in Cosmos DB volgen hetzelfde gedrag als bitwise operators in JavaScript. JavaScript slaat getallen op als 64 bits zwevende kommanummers, maar alle bitsgewijze bewerkingen worden uitgevoerd op binaire getallen van 32 bits. Voordat een bitsgewijze bewerking wordt uitgevoerd, converteert JavaScript getallen naar 32 bits ondertekende gehele getallen. Nadat de bitsgewijze bewerking is uitgevoerd, wordt het resultaat teruggezet naar JavaScript-getallen van 64 bits. Zie Voor meer informatie over de bitwise operators in JavaScript, javaScript binaire bitwise operators op Mozilla Developer Network (MDN) Web Docs.

Gelijkheids- en vergelijkingsoperatoren

Gelijkheids- en vergelijkingsoperatoren controleren twee expressies op gelijkwaardigheid of vergelijken ze relationeel. In de volgende tabel ziet u het resultaat van gelijkheidsvergelijkingen tussen twee JSON-typen in de API voor NoSQL:

niet-gedefinieerde Null Booleaan Number Snaar / Touwtje Object Array
niet-gedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde
Nul Ongedefinieerde OK- Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde
Boolean Ongedefinieerde Ongedefinieerde OK- Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde
Nummer Ongedefinieerde Ongedefinieerde Ongedefinieerde OK- Ongedefinieerde Ongedefinieerde Ongedefinieerde
String Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde OK- Ongedefinieerde Ongedefinieerde
Object Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde OK- Ongedefinieerde
Array Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde Ongedefinieerde OK-

Voor vergelijkingsoperatoren zoals >``, >=, `!=, <``, and <=, comparison across types or between two objects or arrays produces `undefined. Als het resultaat van de scalaire expressie undefined``, the item isn't included in the result, because niet is gedefinieerd alsdoesn't equate towaar''.

Example

De volgende query vergelijkt een getal- en tekenreekswaarde, die 'niet gedefinieerd' produceert. Daarom bevat het filter geen resultaten:

SELECT
    *
FROM
    products p
WHERE 
    0 = "true"

Logische operatoren

Logische operators vergelijken twee expressies met booleaansetrue/false operanden. In de volgende secties worden de waarheidstabellen en prioriteit voor elke logische operator beschreven.

OR-operator

De OR operator retourneert true wanneer een van de voorwaarden 'waar' is.

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

AND-operator

De AND operator retourneert true wanneer beide expressies 'true' zijn.

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

NOT-operator

De NOT operator keert de waarde van een booleaanse expressie om.

NOT
true false
false true
undefined undefined

Operatorprioriteit

De logische operators OR``, AND', en NOT hebben de volgende prioriteitsniveaus:

Operator Priority
NOT 1
AND 2
OR 3

Projectieoperator

De speciale operator * projecteert het hele item zoals dat is. Wanneer dit wordt gebruikt, moet dit het enige verwachte veld zijn. Een query zoals SELECT * FROM products p is geldig, maar SELECT VALUE * FROM products p of SELECT *, p.id FROM products p niet geldig.

Ternaire- en samenvoegoperatoren

Ternaire en samenvoegingsoperatoren evalueren expressies en retourneren resultaten op basis van booleaanse operanden of het bestaan van velden. Deze operators werken op dezelfde manier als vergelijkbare operators in populaire programmeertalen, zoals C# en JavaScript. Gebruik de ternaire (?) en samenvoegingsoperators (??) om voorwaardelijke expressies te bouwen die bestand zijn tegen semi-gestructureerde of gemengde gegevens.

Ternaire operator

De ? operator retourneert een waarde op basis van de evaluatie van een Boole-expressie.

Syntaxis

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Arguments

Description
bool_expr Een Booleaanse expressie.
expr_true De expressie die moet worden geëvalueerd als bool_expr dit wordt geëvalueerd true.
expr_false De expressie die moet worden geëvalueerd als bool_expr dit wordt geëvalueerd false.

Voorbeelden

In dit voorbeeld worden items in een container gebruikt die meerdere metagegevenseigenschappen bevatten met betrekking tot prijzen. De collapsible eigenschap bestaat niet voor alle items:

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

Deze query evalueert de onSale expressie, die gelijk is aan onSale = true``. The query returns the price multiplied by 0,85ifwaar, 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

Deze query retourneert:

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

U kunt ook aanroepen naar de ? operator nesten. In dit voorbeeld wordt een extra berekening toegevoegd op basis van een tweede eigenschap (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

Deze query retourneert:

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

Net als bij andere queryoperators sluit de ? operator items uit als de eigenschappen waarnaar wordt verwezen ontbreken of de typen die worden vergeleken verschillen.

Samenvoegingsoperator

Gebruik de ?? operator om efficiënt te controleren op een eigenschap in een item bij het uitvoeren van query's op semi-gestructureerde of gemengde gegevens.

Example

In deze query wordt ervan uitgegaan dat een item waar de collapsible eigenschap niet aanwezig is, niet samenvouwbaar is:

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