JavaScript-fråge-API i Azure Cosmos DB

GÄLLER FÖR: NoSQL

Förutom att utfärda frågor med hjälp av API:et för NoSQL i Azure Cosmos DB tillhandahåller Azure Cosmos DB SDK på serversidan ett JavaScript-gränssnitt för att utföra optimerade frågor i Lagrade procedurer och utlösare i Azure Cosmos DB. Du behöver inte känna till SQL-språket för att använda det här JavaScript-gränssnittet. Med JavaScript-fråge-API:et kan du programmatiskt skapa frågor genom att skicka predikatfunktioner till sekvens av funktionsanrop, med en syntax som liknar ECMAScript5-matrisens inbyggda matriser och populära JavaScript-bibliotek som Lodash. Frågor parsas av JavaScript-körningen och körs effektivt med hjälp av Azure Cosmos DB-index.

JavaScript-funktioner som stöds

Funktion Beskrivning
chain() ... .value([callback] [, options]) Startar ett kedjat anrop som måste avslutas med value().
filter(predicateFunction [, options] [, callback]) Filtrerar indata med hjälp av en predikatfunktion som returnerar sant/falskt för att filtrera in-/utdatadokument i den resulterande uppsättningen. Den här funktionen fungerar ungefär som en WHERE-sats i SQL.
flatten([isShallow] [, options] [, callback]) Kombinerar och jämnar ut matriser från varje indataobjekt till en enda matris. Den här funktionen fungerar ungefär som SelectMany i LINQ.
map(transformationFunction [, options] [, callback]) Tillämpar en projektion givet en transformeringsfunktion som mappar varje indataobjekt till ett JavaScript-objekt eller -värde. Den här funktionen fungerar ungefär som en SELECT-sats i SQL.
pluck([propertyName] [, options] [, callback]) Den här funktionen är en genväg för en karta som extraherar värdet för en enskild egenskap från varje indataobjekt.
sortBy([predicate] [, options] [, callback]) Skapar en ny uppsättning dokument genom att sortera dokumenten i indatadokumentströmmen i stigande ordning med hjälp av det angivna predikatet. Den här funktionen fungerar ungefär som en ORDER BY-sats i SQL.
sortByDescending([predicate] [, options] [, callback]) Skapar en ny uppsättning dokument genom att sortera dokumenten i indatadokumentströmmen i fallande ordning med hjälp av det angivna predikatet. Den här funktionen fungerar ungefär som en ORDER BY x DESC-sats i SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Utför en självkoppling med inre matris och lägger till resultat från båda sidor som tupplar i resultatprojektionen. Till exempel skulle anslutning av ett persondokument med person.pets producera [person, husdjur] tupplar. Detta liknar SelectMany i .NET LINQ.

När de ingår i predikat- och/eller väljarefunktioner optimeras följande JavaScript-konstruktioner automatiskt för att köras direkt på Azure Cosmos DB-index:

  • Enkla operatorer: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literaler, inklusive objektliteralen: {}
  • var, return

Följande JavaScript-konstruktioner optimeras inte för Azure Cosmos DB-index:

  • Kontrollflöde: ifforwhile
  • Funktionsanrop

Mer information finns i JavaScript-dokumentationen för Azure Cosmos DB Server Side.

Fuskark för SQL till JavaScript

I följande tabell visas olika SQL-frågor och motsvarande JavaScript-frågor. Precis som med SQL-frågor är egenskaper (till exempel item.id) skiftlägeskänsliga.

Kommentar

__ (dubbelunderstreck) är ett alias till getContext().getCollection() när du använder frågan JavaScript API.

SQL JavaScript-fråge-API Beskrivning
VÄLJ*
FROM-dokument
__.map(function(doc) {
    return doc;
});
Resulterar i alla dokument (sidnumrerade med fortsättningstoken) som de är.
VÄLJ
   docs.id,
   docs.message AS msg,
   docs.actions
FROM-dokument
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Projicerar id, meddelande (alias till msg) och åtgärd från alla dokument.
VÄLJ*
FROM-dokument
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Frågor om dokument med predikatet: id = "X998_Y998".
VÄLJ*
FROM-dokument
WHERE
   ARRAY_CONTAINS(docs. Taggar, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Frågor om dokument som har egenskapen Taggar och Taggar är en matris som innehåller värdet 123.
SELECT
   docs.id,
   docs.message AS msg
FROM-dokument
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();
Frågor om dokument med predikat, id = "X998_Y998" och projekterar sedan ID och meddelande (alias till msg).
SELECT VALUE-tagg
FROM-dokument
JOIN tag IN docs. Taggar
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        returnera dokument. Taggar & matris.isArray(doc. Taggar);
    })
    .sortBy(function(doc) {
        return doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Filter för dokument som har en matrisegenskap, Taggar och sorterar de resulterande dokumenten efter den _ts tidsstämpelsystemegenskapen och sedan projekt + plattar ut matrisen Taggar.

Nästa steg

Lär dig mer om begrepp och instruktioner för att skriva och använda lagrade procedurer, utlösare och användardefinierade funktioner i Azure Cosmos DB: