API di query JavaScript in Azure Cosmos DB
SI APPLICA A: NoSQL
Oltre a eseguire query usando l'API per NoSQL di Azure Cosmos DB, l'SDK lato server di Azure Cosmos DB offre un'interfaccia JavaScript per eseguire query ottimizzate nelle stored procedure e nei trigger di Azure Cosmos DB. Non è necessario conoscere il linguaggio SQL per usare questa interfaccia JavaScript. L'API di query di JavaScript consente di creare query a livello di programmazione passando funzioni di predicato in una sequenza di chiamate di funzione, con una sintassi simile alle librerie JavaScript predefinite di ECMAScript5 e alle librerie JavaScript più diffuse come Lodash. Le query vengono analizzate dal runtime JavaScript ed eseguite in modo efficiente usando gli indici di Azure Cosmos DB.
Funzioni JavaScript supportate
Funzione | Descrizione |
---|---|
chain() ... .value([callback] [, options]) |
Avvia una chiamata concatenata che deve terminare con value(). |
filter(predicateFunction [, options] [, callback]) |
Filtra l'input usando una funzione di predicato che restituisce true o false per includere o escludere i documenti di input dal set risultante. Il comportamento di questa funzione è simile a quello di una clausola WHERE in SQL. |
flatten([isShallow] [, options] [, callback]) |
Combina e rende flat le matrici da ogni elemento di input in un'unica matrice. Il comportamento di questa funzione è simile a quello di SelectMany in LINQ. |
map(transformationFunction [, options] [, callback]) |
Applica una proiezione a partire da una funzione di trasformazione che esegue il mapping di ogni elemento di input a un valore o oggetto JavaScript. Il comportamento di questa funzione è simile a quello di una clausola SELECT in SQL. |
pluck([propertyName] [, options] [, callback]) |
Questa funzione è un collegamento a una mappa che estrae il valore di una singola proprietà da ogni elemento di input. |
sortBy([predicate] [, options] [, callback]) |
Produce un nuovo set di documenti ordinandoli nel flusso di documenti di input in ordine crescente usando il predicato specificato. Il comportamento di questa funzione è simile a quello di una clausola ORDER BY in SQL. |
sortByDescending([predicate] [, options] [, callback]) |
Produce un nuovo set di documenti ordinandoli nel flusso di documenti di input in ordine decrescente usando il predicato specificato. Il comportamento di questa funzione è simile a quello di una clausola ORDER BY x DESC in SQL. |
unwind(collectionSelector, [resultSelector], [options], [callback]) |
Esegue un self join con inner array e aggiunge i risultati da entrambi i lati come di tuple alla proiezione dei risultati. Ad esempio, l'aggiunta di un documento Person con person.pets produrrebbe tuple [person, pet]. Il comportamento è simile a quello di SelectMany in .NET LINQ. |
Quando inclusi all'interno delle funzioni predicato e/o selettore, i seguenti costrutti JavaScript vengono automaticamente ottimizzati per l'esecuzione diretta sugli indici di Azure Cosmos DB:
- Operatori semplici:
=
+
-
*
/
%
|
^
&
==
!=
===
!==
<
>
<=
>=
||
&&
<<
>>
>>>
~
- Valori letterali, incluso il valore letterale dell'oggetto:
{}
- var, return
I seguenti costrutti JavaScript non vengono ottimizzati per gli indici di Azure Cosmos DB:
- Flusso di controllo:
if
for
while
- Chiamate di funzione
Per ottenere altre informazioni, consultare la documentazione relativa a JavaScript lato server di Azure Cosmos DB.
Foglio riassuntivo di SQL a JavaScript
Nella tabella seguente vengono presentate varie query SQL e le query JavaScript corrispondenti. Come per le query SQL, le proprietà ,ad esempio , item.id
fanno distinzione tra maiuscole e minuscole.
Nota
__
(doppio carattere di sottolineatura) è un alias per getContext().getCollection()
quando si usa l'API di query JavaScript.
SQL | API di query JavaScript | Descrizione |
---|---|---|
SELECT * FROM docs |
__.map(function(doc) { return doc; }); |
Viene restituita così com'è in tutti i documenti, impaginati con token di continuazione. |
SELECT docs.id, docs.message AS msg, docs.actions FROM docs |
__.map(function(doc) { return { id: doc.id, msg: doc.message, actions:doc.actions }; }); |
Proietta l'ID, il messaggio (con aliasing effettuato a msg) e l'azione da tutti i documenti. |
SELECT * FROM docs WHERE docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
Esegue una query sui documenti con il predicato: id = "X998_Y998". |
SELECT * FROM docs WHERE ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { return x.Tags && x.Tags.indexOf(123) > -1; }); |
Esegue una query sui documenti che hanno una proprietà Tags e Tags è una matrice che contiene il valore 123. |
SELECT docs.id, docs.message AS msg FROM docs 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(); |
Esegue una query sui documenti con un predicato id = "X998_Y998" e quindi proietta l'ID e il messaggio (con aliasing effettuato a msg). |
SELECT VALUE tag FROM docs JOIN tag IN docs.Tags ORDER BY docs._ts |
__.chain() .filter(function(doc) { return doc.Tags && Array.isArray(doc.Tags); }) .sortBy(function(doc) { return doc._ts; }) .pluck("Tags") .flatten() .value() |
Filtra i documenti che hanno la proprietà di matrice Tags, ordina i documenti risultanti in base alla proprietà di sistema timestamp _ts e quindi proietta e appiattisce la matrice Tags. |
Passaggi successivi
Altre informazioni su come scrivere e usare stored procedure, trigger e funzioni definite dall'utente in Azure Cosmos DB:
- Come scrivere stored procedure e trigger in Azure Cosmos DB usando l'API di query di JavaScript
- Uso delle stored procedure, dei trigger e delle funzioni definite dall'utente di Azure Cosmos DB
- Come usare stored procedure, trigger e funzioni definite dall'utente in Azure Cosmos DB
- Riferimento API di lato server JavaScript di Azure Cosmos DB
- JavaScript ES6 (ECMA 2015)