Freigeben über


JavaScript-Abfrage-API in Azure Cosmos DB

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: