Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zusätzlich zum Ausgeben von Abfragen mit der API für NoSQL in Azure Cosmos DB bietet das serverseitige Azure Cosmos DB SDK eine JavaScript-Schnittstelle zum Ausführen optimierter Abfragen in Azure Cosmos DB Stored Procedures and Triggers. Sie müssen die SQL-Sprache nicht kennen, um diese JavaScript-Schnittstelle zu verwenden. Mit der JavaScript-Abfrage-API können Sie Abfragen programmgesteuert erstellen, indem Sie Prädikatfunktionen in Sequenzen von Funktionsaufrufen übergeben, mit einer Syntax, die den integrierten Arrays von ECMAScript5 und beliebten JavaScript-Bibliotheken wie Lodash ähnelt. Abfragen werden von der JavaScript-Laufzeit analysiert und mithilfe von Azure Cosmos DB-Indizes effizient ausgeführt.
Unterstützte JavaScript-Funktionen
| Function | Beschreibung |
|---|---|
chain() ... .value([callback] [, options]) |
Startet einen verketteten Aufruf, der mit value() beendet werden muss. |
filter(predicateFunction [, options] [, callback]) |
Filtert die Eingabe mithilfe einer Prädikatfunktion, die true/false zurückgibt, um Eingangsdokumente in die oder aus der resultierenden Menge zu filtern. Diese Funktion verhält sich ähnlich wie eine WHERE-Klausel in SQL. |
flatten([isShallow] [, options] [, callback]) |
Kombiniert und vereinfacht Arrays aus jedem Eingabeelement in einem einzigen Array. Diese Funktion verhält sich ähnlich wie SelectMany in LINQ. |
map(transformationFunction [, options] [, callback]) |
Wendet eine Projektion mit einer Transformationsfunktion an, die jedes Eingabeelement einem JavaScript-Objekt oder -Wert zuordnet. Diese Funktion verhält sich ähnlich wie eine SELECT-Klausel in SQL. |
pluck([propertyName] [, options] [, callback]) |
Diese Funktion ist eine Abkürzung für eine Abbildung, die den Wert einer einzelnen Eigenschaft aus jedem Eingabeelement abruft. |
sortBy([predicate] [, options] [, callback]) |
Erzeugt eine neue Gruppe von Dokumenten, indem die Dokumente im Eingabedokumentdatenstrom mithilfe des angegebenen Prädikats in aufsteigender Reihenfolge sortiert werden. Diese Funktion verhält sich ähnlich wie eine ORDER BY-Klausel in SQL. |
sortByDescending([predicate] [, options] [, callback]) |
Erzeugt einen neuen Satz von Dokumenten, indem die Dokumente im Eingabedokumentdatenstrom mithilfe des angegebenen Prädikats in absteigender Reihenfolge sortiert werden. Diese Funktion verhält sich ähnlich wie eine ORDER BY x DESC-Klausel in SQL. |
unwind(collectionSelector, [resultSelector], [options], [callback]) |
Führt eine Selbstverknüpfung mit innerem Array aus und fügt die Ergebnisse beider Seiten als Tupel zur Ergebnisprojektion hinzu. Beispielsweise würde die Verknüpfung eines Personendokuments mit person.haustiere [Person, Haustier] Tupel erzeugen. Dies ähnelt SelectMany in .NET LINQ. |
Wenn sie in Prädikat- und/oder Selektorfunktionen enthalten sind, werden die folgenden JavaScript-Konstrukte automatisch für die direkte Ausführung auf Azure Cosmos DB-Indizes optimiert:
- Einfache Operatoren:
=+-*/%|^&==!====!==<><=>=||&&<<>>>>>~ - Literale, einschließlich des Objektliterals:
{} - var, return
Die folgenden JavaScript-Konstrukte werden nicht für Azure Cosmos DB-Indizes optimiert:
- Steuerungsfluss:
ifforwhile - Funktionsaufrufe
Weitere Informationen finden Sie in der Dokumentation zu Azure Cosmos DB Server Side JavaScript.
SQL für JavaScript-Spickzettel
Die folgende Tabelle enthält verschiedene SQL-Abfragen und die entsprechenden JavaScript-Abfragen. Wie bei SQL-Abfragen wird bei Eigenschaften (z. B. item.id) auf die Groß-/Kleinschreibung geachtet.
Hinweis
__ (Doppelter Unterstrich) ist ein Alias für getContext().getCollection() bei der Verwendung der JavaScript-Abfrage-API.
| SQL | JavaScript-Abfrage-API | Beschreibung |
|---|---|---|
| AUSWÄHLEN* FROM-Dokumente |
__.map(function(doc) { Dokument zurückgeben; }); |
Führt wie folgt zu allen Dokumenten (paginiert mit Fortsetzungstoken). |
| AUSWÄHLEN docs.id, docs.message AS msg, docs.actions FROM-Dokumente |
__.map(function(doc) { return { ID: doc.id, msg: doc.message, actions:doc.actions }; }); |
Projiziert die ID, Nachricht (alias msg) und Aktion aus allen Dokumenten. |
| AUSWÄHLEN* FROM-Dokumente WHERE docs.id="X998_Y998" |
__.filter(function(doc) { doc.id zurückgeben ==="X998_Y998"; }); |
Fragt nach Dokumenten mit dem Prädikat ab: id = "X998_Y998". |
| AUSWÄHLEN* FROM-Dokumente WHERE ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { x.Tags && x.Tags.indexOf(123) > -1 zurückgeben; }); |
Abfragen für Dokumente mit einer Tags-Eigenschaft und Tags ist ein Array, das den Wert 123 enthält. |
| SELECT docs.id, docs.message AS msg FROM-Dokumente WHERE docs.id="X998_Y998" |
__.chain() .filter(function(doc) { doc.id zurückgeben ==="X998_Y998"; }) .map(function(doc) { return { ID: doc.id, msg: doc.message }; }) .value(); |
Fragt nach Dokumenten mit einem Prädikat, id = "X998_Y998", und projiziert dann die ID und Nachricht (aliased to msg). |
| SELECT VALUE-Tag FROM-Dokumente JOIN-Tag IN Dokumenten.Tags ORDER BY docs._ts |
__.chain() .filter(function(doc) { return doc.Tags && Array.isArray(doc.Tags); }) .sortBy(function(doc) { doc._ts zurückgeben; }) .pluck("Tags") .flatten() .value() |
Filtert für Dokumente mit einer Arrayeigenschaft "Tags" und sortiert die resultierenden Dokumente nach der _ts-Zeitstempel-Systemeigenschaft, und dann wird das Array "Tags" projiziert und geflachtet. |
Nächste Schritte
Weitere Konzepte und Vorgehensweisen zum Schreiben und Verwenden von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen in Azure Cosmos DB:
- So schreiben Sie gespeicherte Prozeduren und Trigger mithilfe der JavaScript-Abfrage-API
- Arbeiten mit gespeicherten Azure Cosmos DB-Prozeduren, Triggern und benutzerdefinierten Funktionen
- Verwenden gespeicherter Prozeduren, Trigger, benutzerdefinierter Funktionen in Azure Cosmos DB
- Azure Cosmos DB JavaScript-serverseitige API-Referenz
- JavaScript ES6 (ECMA 2015)