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. Als u bijvoorbeeld lid wordt van een 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 de letterlijke object: {}
  • var, return

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

  • Controlestroom: ifforwhile
  • Functie-aanroepen

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

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
SELECTEER*
VAN documenten
__.map(function(doc) {
    document retourneren;
});
Resulteert in alle documenten (gepagineerd met vervolgtoken) zoals dat is.
SELECTEER
   docs.id,
   docs.message AS msg,
   docs.actions
VAN documenten
__.map(function(doc) {
    retourneren {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Projecteert de id, het bericht (alias naar msg) en de actie van alle documenten.
SELECTEER*
VAN documenten
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    doc.id ==="X998_Y998";
});
Query's voor documenten met het predicaat: id = "X998_Y998".
SELECTEER*
VAN documenten
WHERE
   ARRAY_CONTAINS(docs). Tags, 123)
__.filter(function(x) {
    x.Tags && x.Tags.indexOf(123) > -1;
});
Query's voor documenten met een eigenschap Tags en Tags is een matrix met de waarde 123.
SELECTEREN
   docs.id,
   docs.message AS msg
VAN documenten
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        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-documenten. Tags
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        document retourneren. Tags && Array.isArray(doc. Tags);
    })
    .sortBy(function(doc) {
        doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Hiermee filtert u op documenten met een matrixeigenschap, tags en sorteert u de resulterende documenten op basis van de eigenschap _ts tijdstempelsysteem, en vervolgens projecten en plat de matrix 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: