Rozhraní API pro dotazy v JavaScriptu ve službě Azure Cosmos DB

PLATÍ PRO: NoSQL

Kromě vydávání dotazů pomocí rozhraní API pro NoSQL ve službě Azure Cosmos DB poskytuje sada SDK na straně serveru Azure Cosmos DB rozhraní JavaScript pro provádění optimalizovaných dotazů v uložených procedurách a triggerech služby Azure Cosmos DB. Abyste mohli toto rozhraní JavaScriptu používat, nemusíte si být vědomi jazyka SQL. Rozhraní API pro dotazy JavaScriptu umožňuje programově sestavovat dotazy předáváním predikátových funkcí do posloupnosti volání funkcí se syntaxí podobnou předdefinovaným polím ECMAScript5 a oblíbeným javascriptovým knihovnám, jako je Lodash. Dotazy se analyzují modulem runtime JavaScriptu a efektivně se spouštějí pomocí indexů Azure Cosmos DB.

Podporované javascriptové funkce

Funkce Popis
chain() ... .value([callback] [, options]) Spustí zřetězené volání, které musí být ukončeno hodnotou().
filter(predicateFunction [, options] [, callback]) Filtruje vstup pomocí predikátové funkce, která vrací hodnotu true/false, aby se vstupní dokumenty vyfiltrovály do výsledné sady. Tato funkce se chová podobně jako klauzule WHERE v SQL.
flatten([isShallow] [, options] [, callback]) Kombinuje a zploštěná pole z každé vstupní položky do jednoho pole. Tato funkce se chová podobně jako SelectMany v LINQ.
map(transformationFunction [, options] [, callback]) Použije projekci zadanou transformační funkci, která mapuje každou vstupní položku na objekt nebo hodnotu JavaScriptu. Tato funkce se chová podobně jako klauzule SELECT v SQL.
pluck([propertyName] [, options] [, callback]) Tato funkce je zkratka pro mapu, která extrahuje hodnotu jedné vlastnosti z každé vstupní položky.
sortBy([predicate] [, options] [, callback]) Vytvoří novou sadu dokumentů seřazením dokumentů ve vstupním datovém proudu dokumentu ve vzestupném pořadí pomocí daného predikátu. Tato funkce se chová podobně jako klauzule ORDER BY v SQL.
sortByDescending([predicate] [, options] [, callback]) Vytvoří novou sadu dokumentů seřazením dokumentů ve vstupním datovém proudu dokumentu v sestupném pořadí pomocí daného predikátu. Tato funkce se chová podobně jako klauzule ORDER BY x DESC v SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Provede samostatné spojení s vnitřním polem a přidá výsledky z obou stran jako řazené kolekce členů do projekce výsledku. Například připojování k dokumentu osoby s osobou.pets by vytvořilo [osobu, domácí zvířata] řazené kolekce členů. To se podobá selectMany v .NET LINQ.

Pokud jsou součástí funkcí predikátu nebo selektoru, následující javascriptové konstruktory se automaticky optimalizují tak, aby běžely přímo na indexech Azure Cosmos DB:

  • Jednoduché operátory: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literály, včetně literálu objektu: {}
  • var, return

Následující konstrukty JavaScriptu se neoptimalizovaly pro indexy Azure Cosmos DB:

  • Tok řízení: ifforwhile
  • Volání funkcí

Další informace najdete v dokumentaci k JavaScriptu na straně serveru služby Azure Cosmos DB.

Tahák SQL do JavaScriptu

Následující tabulka obsahuje různé dotazy SQL a odpovídající javascriptové dotazy. Stejně jako u dotazů SQL rozlišují vlastnosti (například item.id) malá a velká písmena.

Poznámka:

__ (dvojité podtržítko) je alias pro getContext().getCollection() použití rozhraní API pro dotazy JavaScriptu.

SQL JavaScript Query API Popis
VYBERTE*
Dokumentace FROM
__.map(function(doc) {
    vrátit dokument;
});
Výsledkem jsou všechny dokumenty (stránkované s tokenem pokračování), jak je.
VYBERTE
   docs.id,
   docs.message AS msg,
   docs.actions
Dokumentace FROM
__.map(function(doc) {
    return {
        ID: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Prodá ID, zprávu (alias pro msg) a akci ze všech dokumentů.
VYBERTE*
Dokumentace FROM
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Dotazy na dokumenty s predikátem: id = "X998_Y998".
VYBERTE*
Dokumentace FROM
WHERE
   ARRAY_CONTAINS(dokumentace). Značky, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Dotazy na dokumenty, které mají vlastnost Značky a Značky, je pole obsahující hodnotu 123.
VÝBĚR
   docs.id,
   docs.message AS msg
Dokumentace FROM
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();
Dotazuje se na dokumenty s predikátem, ID = "X998_Y998" a pak projektuje ID a zprávu (alias pro msg).
SELECT VALUE tag
Dokumentace FROM
JOIN tag IN docs. Tagy
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        vrátit dokument. Tags && Array.isArray(doc. Značky);
    })
    .sortBy(function(doc) {
        vrácení doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .Value()
Filtry pro dokumenty, které mají vlastnost pole, Značky a seřadí výsledné dokumenty podle vlastnosti systému časového razítka _ts a potom projekty + zploštějí pole Značky.

Další kroky

Přečtěte si další koncepty a postupy pro zápis a používání uložených procedur, triggerů a uživatelem definovaných funkcí ve službě Azure Cosmos DB: