Interfejs API zapytań JavaScript w usłudze Azure Cosmos DB

DOTYCZY: NoSQL

Oprócz wykonywania zapytań przy użyciu interfejsu API dla NoSQL w usłudze Azure Cosmos DB zestaw SDK po stronie serwera usługi Azure Cosmos DB udostępnia interfejs Języka JavaScript do wykonywania zoptymalizowanych zapytań w procedurach składowanych i wyzwalaczach usługi Azure Cosmos DB. Nie musisz pamiętać o języku SQL, aby używać tego interfejsu języka JavaScript. Interfejs API zapytań Języka JavaScript umożliwia programowe kompilowanie zapytań przez przekazywanie funkcji predykatu do sekwencji wywołań funkcji z składnią podobną do wbudowanych tablic ECMAScript5 i popularnych bibliotek Języka JavaScript, takich jak Lodash. Zapytania są analizowane przez środowisko uruchomieniowe języka JavaScript i wydajnie wykonywane przy użyciu indeksów usługi Azure Cosmos DB.

Obsługiwane funkcje języka JavaScript

Funkcja Opis
chain() ... .value([callback] [, options]) Uruchamia wywołanie łańcuchowe, które musi zostać zakończone wartością().
filter(predicateFunction [, options] [, callback]) Filtruje dane wejściowe przy użyciu funkcji predykatu, która zwraca wartość true/false, aby filtrować dokumenty wejściowe w/wy do wynikowego zestawu. Ta funkcja zachowuje się podobnie do klauzuli WHERE w języku SQL.
flatten([isShallow] [, options] [, callback]) Łączy i spłaszcza tablice z każdego elementu wejściowego w jedną tablicę. Ta funkcja działa podobnie jak SelectMany w linQ.
map(transformationFunction [, options] [, callback]) Stosuje projekcję daną funkcję przekształcania, która mapuje każdy element wejściowy na obiekt lub wartość języka JavaScript. Ta funkcja zachowuje się podobnie do klauzuli SELECT w języku SQL.
pluck([propertyName] [, options] [, callback]) Ta funkcja jest skrótem do mapy, która wyodrębnia wartość pojedynczej właściwości z każdego elementu wejściowego.
sortBy([predicate] [, options] [, callback]) Tworzy nowy zestaw dokumentów przez sortowanie dokumentów w strumieniu dokumentu wejściowego w kolejności rosnącej przy użyciu danego predykatu. Ta funkcja zachowuje się podobnie do klauzuli ORDER BY w języku SQL.
sortByDescending([predicate] [, options] [, callback]) Tworzy nowy zestaw dokumentów przez sortowanie dokumentów w strumieniu dokumentu wejściowego w kolejności malejącej przy użyciu danego predykatu. Ta funkcja zachowuje się podobnie do klauzuli ORDER BY x DESC w języku SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Wykonuje samosprzężenie z tablicą wewnętrzną i dodaje wyniki z obu stron jako krotki do projekcji wyników. Na przykład dołączenie do dokumentu osoby z person.pets spowodowałoby produkcję krotek [person, pet] . Jest to podobne do selectMany na platformie .NET LINQ.

W przypadku dołączania do funkcji predykatu i/lub selektora następujące konstrukcje języka JavaScript są automatycznie zoptymalizowane pod kątem uruchamiania bezpośrednio w indeksach usługi Azure Cosmos DB:

  • Proste operatory: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literały, w tym literał obiektu: {}
  • var, return

Następujące konstrukcje języka JavaScript nie są zoptymalizowane pod kątem indeksów usługi Azure Cosmos DB:

  • Przepływ sterowania: ifforwhile
  • Wywołania funkcji

Aby uzyskać więcej informacji, zobacz dokumentację języka JavaScript po stronie serwera usługi Azure Cosmos DB.

Ściągawka języka SQL do języka JavaScript

W poniższej tabeli przedstawiono różne zapytania SQL i odpowiadające im zapytania JavaScript. Podobnie jak w przypadku zapytań SQL, właściwości (na przykład item.id) są uwzględniane wielkości liter.

Uwaga

__ (podwójne podkreślenie) jest aliasem funkcji getContext().getCollection() podczas korzystania z interfejsu API zapytań języka JavaScript.

SQL Interfejs API zapytań JavaScript Opis
WYBIERZ*
Z dokumentacji
__.map(function(doc) {
    zwraca dokument;
});
Wyniki we wszystkich dokumentach (podzielonych na strony z tokenem kontynuacji), tak jak to jest.
WYBIERZ
   docs.id,
   docs.message AS msg,
   docs.actions
Z dokumentacji
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Projektuje identyfikator, komunikat (alias do msg) i akcję ze wszystkich dokumentów.
WYBIERZ*
Z dokumentacji
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id "X998_Y998";
});
Zapytania dotyczące dokumentów z predykatem: id = "X998_Y998".
WYBIERZ*
Z dokumentacji
WHERE
   ARRAY_CONTAINS(docs). Tagi, 123)
__.filter(function(x) {
    zwróć x.Tags && x.Tags.indexOf(123) > -1;
});
Zapytania dotyczące dokumentów, które mają właściwość Tags, a Tagi to tablica zawierająca wartość 123.
SELECT
   docs.id,
   docs.message AS msg
Z dokumentacji
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        return doc.id "X998_Y998";
    })
    .map(function(doc) {
       return {
            id: doc.id,
            msg: doc.message
       };
    })
.Value();
Wykonuje zapytania dotyczące dokumentów z predykatem, id = "X998_Y998", a następnie projektuje identyfikator i komunikat (alias do msg).
TAG SELECT VALUE
Z dokumentacji
TAG JOIN W dokumentacji. Tagi
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        zwróć dokument. Tags && Array.isArray(doc. Tagi);
    })
    .sortBy(function(doc) {
        zwracanie doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .Value()
Filtry dla dokumentów, które mają właściwość tablicy, Tagi i sortuje wynikowe dokumenty według właściwości systemu sygnatury czasowej _ts, a następnie projekty + spłaszcza tablicę Tagi.

Następne kroki

Dowiedz się więcej pojęć i instrukcji dotyczących pisania i używania procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika w usłudze Azure Cosmos DB: