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:
if
for
while
- 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 |
---|---|---|
UTVALD* FROM-dokument |
__.map(function(doc) { return doc; }); |
Resulterar i alla dokument (sidnumrerade med fortsättningstoken) som de är. |
UTVALD 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. |
UTVALD* FROM-dokument WHERE docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
Frågor om dokument med predikatet: id = "X998_Y998". |
UTVALD* 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:
- Så här skriver du lagrade procedurer och utlösare med JavaScript Query API
- Arbeta med azure Cosmos DB-lagrade procedurer, utlösare och användardefinierade funktioner
- Använda lagrade procedurer, utlösare, användardefinierade funktioner i Azure Cosmos DB
- Api-referens för Azure Cosmos DB JavaScript på serversidan
- JavaScript ES6 (ECMA 2015)