Delen via


JavaScript-query-API in Azure Cosmos DB

VAN TOEPASSING OP: NoSQL

Naast het uitgeven van query's met behulp van de API voor NoSQL in Azure Cosmos DB biedt de SDK aan de serverzijde van Azure Cosmos DB een JavaScript-interface voor het uitvoeren van geoptimaliseerde query's in opgeslagen procedures en triggers in Azure Cosmos DB. U hoeft zich niet bewust te zijn van de SQL-taal om deze JavaScript-interface te gebruiken. Met de JavaScript-query-API kunt u programmatisch query's bouwen door predicaatfuncties door te geven in volgorde van functie-aanroepen, met een syntaxis die vergelijkbaar is met de ingebouwde matrix van ECMAScript5 en populaire JavaScript-bibliotheken zoals Lodash. Query's worden geparseerd door de JavaScript-runtime en efficiënt uitgevoerd met behulp van Azure Cosmos DB-indexen.

Ondersteunde JavaScript-functies

Functie Beschrijving
chain() ... .value([callback] [, options]) Hiermee wordt een gekoppelde aanroep gestart die moet worden beëindigd met value().
filter(predicateFunction [, options] [, callback]) Filtert de invoer met behulp van een predicaatfunctie die waar/onwaar retourneert om invoerdocumenten in de resulterende set te filteren. Deze functie gedraagt zich vergelijkbaar met een WHERE-component in SQL.
flatten([isShallow] [, options] [, callback]) Hiermee worden matrices van elk invoeritem gecombineerd en afgevlakt in één matrix. Deze functie gedraagt zich vergelijkbaar met SelectMany in LINQ.
map(transformationFunction [, options] [, callback]) Hiermee past u een projectie toe op basis van een transformatiefunctie waarmee elk invoeritem wordt toegewezen aan een JavaScript-object of -waarde. Deze functie gedraagt zich vergelijkbaar met een SELECT-component in SQL.
pluck([propertyName] [, options] [, callback]) Deze functie is een snelkoppeling voor een kaart waarmee de waarde van één eigenschap uit elk invoeritem wordt geëxtraheerd.
sortBy([predicate] [, options] [, callback]) Produceert een nieuwe set documenten door de documenten in de invoerdocumentstroom in oplopende volgorde te sorteren met behulp van het opgegeven predicaat. Deze functie gedraagt zich vergelijkbaar met een ORDER BY-component in SQL.
sortByDescending([predicate] [, options] [, callback]) Produceert een nieuwe set documenten door de documenten in de invoerdocumentstroom in aflopende volgorde te sorteren met behulp van het opgegeven predicaat. Deze functie gedraagt zich vergelijkbaar met een ORDER BY x DESC-component in SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Voert een self-join met binnenste matrix uit en voegt resultaten van beide zijden toe als tuples aan de resultaatprojectie. Bijvoorbeeld, bij het samenvoegen van een persoon document met person.pets worden [persoon, huisdier] tuples geproduceerd. Dit is vergelijkbaar met SelectMany in .NET LINQ.

Wanneer deze worden opgenomen in predicaat- en/of selectorfuncties, worden de volgende JavaScript-constructies automatisch geoptimaliseerd voor uitvoering rechtstreeks op Azure Cosmos DB-indexen:

  • Eenvoudige operators: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Letterlijke waarden, inclusief het letterlijke object: {}
  • var, return

De volgende JavaScript-constructies worden niet geoptimaliseerd voor Azure Cosmos DB-indexen:

  • Controlestroom: ifforwhile
  • Functie-aanroepen

Voor meer informatie, zie de JavaScript-documentatie aan de serverzijde van Azure Cosmos DB.

Cheatsheet voor SQL naar JavaScript

De volgende tabel bevat verschillende SQL-query's en de bijbehorende JavaScript-query's. Net als bij SQL-query's zijn eigenschappen (bijvoorbeeld item.id) hoofdlettergevoelig.

Notitie

__ (dubbele onderstreping) is een alias naar getContext().getCollection() bij gebruik van de JavaScript-query-API.

SQL JavaScript-query-API Beschrijving
SELECTEREN*
VAN DOCUMENTEN
__.map(function(doc) {
    document retourneren;
});
Resulteert in alle documenten (gepagineerd met vervolgtoken) zoals dat is.
SELECTEREN
   docs.id,
   docs.message AS msg,
   documenten.acties
VAN DOCUMENTEN
__.map(function(doc) {
    retourneren {
        id: doc.id,
        msg: doc.message,
        acties:doc.acties
    };
});
Projecteert de ID, het bericht (onder alias 'msg') en de actie van alle documenten.
SELECTEREN*
VAN DOCUMENTEN
WAAR
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Query's voor documenten met het predicaat: id = "X998_Y998".
SELECTEREN*
VAN DOCUMENTEN
WAAR
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    x.Tags && x.Tags.indexOf(123) > -1;
});
Query's naar documenten die een eigenschap Tags hebben en waarbij Tags een array is met de waarde 123.
SELECTEREN
   docs.id,
   docs.message AS msg
VAN DOCUMENTEN
WAAR
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        return doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       retourneren {
            id: doc.id,
            msg: doc.message
       };
    })
.value();
Query's voor documenten met een predicaat, id = 'X998_Y998', en projecten vervolgens de id en het bericht (met alias naar msg).
SELECT VALUE-tag
VAN DOCUMENTEN
JOIN-tag IN Tags documenten
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        document retourneren. Tags && Array.isArray(doc. Tags);
    })
    .sortBy(function(doc) {
        doc._ts;
    })
    .pluck("Taggen")
    .flatten()
    .value()
Hiermee filtert u op documenten met een array-eigenschap, Tags, sorteert u de resulterende documenten op basis van de _ts tijdstempel-systeemeigenschap, en projecteert en vlak maakt het de array Tags.

Volgende stappen

Meer concepten en procedures voor het schrijven en gebruiken van opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies in Azure Cosmos DB: