Freigeben über


Operatoren – Abfragesprache in Cosmos DB (in Azure und Fabric)

Cosmos DB (in Azure und Fabric) unterstützt einen umfassenden Satz von Operatoren, mit denen Sie komplexe Abfragen und Datenmanipulationen durchführen können. Zu diesen Operatoren gehören Bitweise, Gleichheit und Vergleich, logische operatoren und ternäre/zusammenwachsende Operatoren, die jeweils spezifischen Zwecken bei der Abfrageerstellung und datenverarbeitung dienen.

Bitweise Operatoren

Bitweise Operatoren eignen sich zum Ausführen von Vorgängen auf niedriger Ebene für ganzzahlige Werte beim Erstellen von JSON-Resultsets. Diese Operatoren funktionieren ähnlich wie ähnliche Operatoren in Programmiersprachen höherer Ebene wie C# und JavaScript. Beispiele für C#-Bitweise-Operatoren finden Sie unter Bitwise- und Schichtoperatoren.

In der folgenden Tabelle werden die bitweisen Vorgänge beschrieben, die in der API für NoSQL unterstützt werden:

Operation Bediener Description
Linke Schicht << Umschalten des linken Werts um die angegebene Anzahl von Bits.
Umschalt rechts >> Umschalten des linken Werts um die angegebene Anzahl von Bits nach rechts .
Nullfüllung (nicht signiert) rechts >>> Verschieben Sie den Wert der linken Seite nach rechts um die angegebene Anzahl von Bits, ohne die meisten Bits nach links zu füllen.
AND & Berechnet bitweise logischeS UND.
OR | Berechnet bitweise logische OR.
XOR ^ Berechnet bitweise logische exklusive OR.

Example

Die folgende Abfrage veranschaulicht jeden bitweisen 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

Diese Abfrage gibt die folgenden Ergebnisse zurück:

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

Von Bedeutung

Die bitweisen Operatoren in Cosmos DB folgen dem gleichen Verhalten wie bitweise Operatoren in JavaScript. JavaScript speichert Zahlen als 64-Bit-Gleitkommazahlen, aber alle bitweisen Vorgänge werden für 32-Bit-Binärzahlen ausgeführt. Bevor ein bitweiser Vorgang ausgeführt wird, konvertiert JavaScript Zahlen in 32-Bit-ganzzahlen. Nachdem der bitweise Vorgang ausgeführt wurde, wird das Ergebnis wieder in 64-Bit-JavaScript-Zahlen konvertiert. Weitere Informationen zu den bitweisen Operatoren in JavaScript finden Sie unter JavaScript binary bitwise operators at Mozilla Developer Network (MDN) Web Docs.

Gleichheits- und Vergleichsoperatoren

Gleichheits- und Vergleichsoperatoren überprüfen zwei Ausdrücke auf Äquivalenz oder vergleichen sie relational. Die folgende Tabelle zeigt das Ergebnis von Gleichheitsvergleichen zwischen zwei JSON-Typen in der API für NoSQL:

nicht definiert Null Boolean Number String Object Array
nicht definiert Undefined Undefined Undefined Undefined Undefined Undefined Undefined
NULL Undefined Okay Undefined Undefined Undefined Undefined Undefined
Boolean Undefined Undefined Okay Undefined Undefined Undefined Undefined
Number Undefined Undefined Undefined Okay Undefined Undefined Undefined
Schnur Undefined Undefined Undefined Undefined Okay Undefined Undefined
Objekt Undefined Undefined Undefined Undefined Undefined Okay Undefined
Anordnung Undefined Undefined Undefined Undefined Undefined Undefined Okay

Für Vergleichsoperatoren wie >``, >=, `!=, <``, and <=, comparison across types or between two objects or arrays produces `undefined. Wenn das Ergebnis des skalaren Ausdrucks nicht definiertdoesn't equate toistundefined``, the item isn't included in the result, because ''.

Example

Die folgende Abfrage vergleicht einen Zahlen- und Zeichenfolgenwert, der "undefined" erzeugt. Daher enthält der Filter keine Ergebnisse:

SELECT
    *
FROM
    products p
WHERE 
    0 = "true"

Logische Operatoren

Logische Operatoren vergleichen zwei Ausdrücke mit booleschen (true/false) Operanden. In den folgenden Abschnitten werden die Wahrheitstabellen und die Rangfolge für jeden logischen Operator beschrieben.

ODER-Operator

Der OR Operator gibt zurück true , wenn eine der Bedingungen "true" ist.

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

UND Operator

Der AND Operator gibt zurück true , wenn beide Ausdrücke 'true' sind.

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

NICHT Operator

Der NOT Operator kehrt den Wert eines booleschen Ausdrucks um.

NOT
true false
false true
undefined undefined

Rangfolge der Operatoren

Die logischen Operatoren OR``, UND', und NOT haben die folgenden Rangfolgenebenen:

Bediener Priority
NOT 1
AND 2
OR 3

Projektionsoperator

Der Spezialoperator * projektiert das gesamte Element wie folgt. Bei Verwendung muss es sich um das einzige projizierte Feld sein. Eine Abfrage wie SELECT * FROM products p ist gültig, aber SELECT VALUE * FROM products pSELECT *, p.id FROM products p nicht gültig.

Ternäre und koaleszierte Operatoren

Ternary- und Koexistenzoperatoren bewerten Ausdrücke und geben Ergebnisse basierend auf booleschen Operanden oder Feldexistenz zurück. Diese Operatoren funktionieren ähnlich wie bei beliebten Programmiersprachen wie C# und JavaScript. Verwenden Sie die Operatoren ternary (?) und zusammengegliedert (??), um bedingte Ausdrücke zu erstellen, die gegen semistrukturierte oder gemischte Datentypen robust sind.

Ternärer Operator

Der ? Operator gibt einen Wert basierend auf der Auswertung eines booleschen Ausdrucks zurück.

Syntax

<bool_expr> ?  
    <expr_true> : 
    <expr_false>

Arguments

Description
bool_expr Ein boolescher Ausdruck.
expr_true Der Ausdruck, der ausgewertet werden soll, wenn bool_expr er ausgewertet wird true.
expr_false Der Ausdruck, der ausgewertet werden soll, wenn bool_expr er ausgewertet wird false.

Examples

In diesem Beispiel werden Elemente in einem Container verwendet, die mehrere Metadateneigenschaften enthalten, die sich auf die Preise beziehen. Die collapsible Eigenschaft ist für alle Elemente nicht vorhanden:

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

Diese Abfrage wertet den onSale Ausdruck aus, der 0,85iftrue, or the price unchanged if `false entsprichtonSale = true``. The query returns the price multiplied by :

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

Diese Abfrage gibt Folgendes zurück:

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

Sie können auch Anrufe an den ? Operator schachteln. In diesem Beispiel wird eine zusätzliche Berechnung basierend auf einer zweiten Eigenschaft (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

Diese Abfrage gibt Folgendes zurück:

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

Wie bei anderen Abfrageoperatoren schließt der ? Operator Elemente aus, wenn die referenzierten Eigenschaften fehlen oder die zu vergleichenden Typen unterschiedlich sind.

Koaleszenzoperator

Verwenden Sie den ?? Operator, um beim Abfragen von halbstrukturierten oder gemischten Daten effizient nach einer Eigenschaft in einem Element zu suchen.

Example

Bei dieser Abfrage wird davon ausgegangen, dass jedes Element, bei dem die collapsible Eigenschaft nicht vorhanden ist, nicht reduzierbar ist:

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