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 mit einer Prädikatfunktion, die „true“/„false“ zurückgibt, um Eingabedokumente für die sich ergebende Gruppe zu filtern. Diese Funktion verhält sich ähnlich wie eine WHERE-Klausel in SQL. |
flatten([isShallow] [, options] [, callback]) |
Kombiniert und vereinfacht Arrays für alle Eingabeelemente zu einem einzelnen 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 Ergebnisse beider Seiten als Tupel der Ergebnisprojektion hinzu. Durch die Verknüpfung eines Personendokuments mit „person.pets“ entstehen also beispielsweise Tupel vom Typ „[Person, Haustier]“. 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.
Cheat Sheet für SQL und JavaScript
Die folgende Tabelle enthält verschiedene SQL-Abfragen und die entsprechenden JavaScript-Abfragen. Bei Eigenschaften (etwa item.id) muss genau wie bei SQL-Abfragen die Groß-/Kleinschreibung beachtet werden.
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 docs |
__.map(function(doc) { Dokument zurückgeben; }); |
Alle Dokumente (umgebrochen mit Fortsetzungstoken) bleiben unverändert. |
| AUSWÄHLEN docs.id, docs.message AS msg, docs.actions FROM docs |
__.map(function(doc) { return { id: doc.id, msg: doc.message, actions:doc.actions }; }); |
Projiziert die ID, Meldung (Alias für „msg“) und Aktion aus allen Dokumenten. |
| AUSWÄHLEN* FROM docs WHERE docs.id="X998_Y998" |
__.filter(function(doc) { doc.id zurückgeben ==="X998_Y998"; }); |
Fragt Dokumente mit dem folgenden Prädikat ab: id = "X998_Y998". |
| AUSWÄHLEN* FROM docs WHERE ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { return x.Tags && x.Tags.indexOf(123) > -1; }); |
Fragt Dokumente mit einer Tags-Eigenschaft ab, wobei „Tags“ ein Array mit dem Wert 123 ist. |
| SELECT docs.id, docs.message AS msg FROM docs 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 Dokumente mit einem Prädikat, id = "X998_Y998", ab und projiziert anschließend die ID und die Meldung (Alias für „msg“). |
| SELECT VALUE-Tag FROM docs JOIN tag IN docs.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 nach Dokumenten mit einer Array-Eigenschaft „Tags“, sortiert die resultierenden Dokumente anhand der Zeitstempel-Systemeigenschaft „_ts“ und projiziert und vereinfacht anschließend das Tags-Array. |
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)