Condividi tramite


JavaScript query API in Azure Cosmos DB

Oltre a eseguire query usando l'API per NoSQL in Azure Cosmos DB, l'SDK lato server di Azure Cosmos DB offre un'interfaccia JavaScript per l'esecuzione di query ottimizzate nelle stored procedure e nei trigger di Azure Cosmos DB. Non è necessario essere consapevoli del linguaggio SQL per usare questa interfaccia JavaScript. L'API di query JavaScript consente di costruire query in modo programmatico passando funzioni di predicato in una sequenza di chiamate di funzione, con una sintassi simile alle funzioni integrate per gli array 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

Function Descrizione
chain() ... .value([callback] [, options]) Inizia una chiamata concatenata che deve essere terminata con value().
filter(predicateFunction [, options] [, callback]) Filtra l'input utilizzando una funzione predicato che restituisce vero/falso per includere o escludere i documenti di input nel set risultante. Questa funzione si comporta in modo simile a una clausola WHERE in SQL.
flatten([isShallow] [, options] [, callback]) Combina e appiattisce gli array di ogni elemento di input in un unico array. Questa funzione si comporta in modo simile a SelectMany in LINQ.
map(transformationFunction [, options] [, callback]) Applica una proiezione in base a una funzione di trasformazione che esegue il mapping di ogni elemento di input a un oggetto o un valore JavaScript. Questa funzione si comporta in modo simile a una clausola SELECT in SQL.
pluck([propertyName] [, options] [, callback]) Questa funzione è un collegamento per 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 ordinando i documenti nel flusso del documento di input in ordine crescente usando il predicato specificato. Questa funzione si comporta in modo simile a una clausola ORDER BY in SQL.
sortByDescending([predicate] [, options] [, callback]) Produce un nuovo set di documenti ordinando i documenti nel flusso del documento di input in ordine decrescente usando il predicato specificato. Questa funzione si comporta in modo simile a una clausola ORDER BY x DESC in SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Esegue un self-join con matrice interna e aggiunge i risultati da entrambi i lati come tuple alla proiezione dei risultati. Ad esempio, unire un documento di persona con person.pets produrrebbe tuple [persona, animale domestico]. Questo è simile a SelectMany in .NET LINQ.

Se inclusi all'interno di funzioni predicati e/o selettori, i costrutti JavaScript seguenti vengono ottimizzati automaticamente per l'esecuzione direttamente negli indici di Azure Cosmos DB:

  • Operatori semplici: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Valori letterali, incluso il valore letterale dell'oggetto: {}
  • var, return

I costrutti JavaScript seguenti non vengono ottimizzati per gli indici di Azure Cosmos DB:

  • Flusso di controllo: ifforwhile
  • Chiamate di funzione

Per altre informazioni, vedere la documentazione javaScript lato server di Azure Cosmos DB.

Foglio informativo da SQL a JavaScript

La tabella seguente presenta varie query SQL e le query JavaScript corrispondenti. Come per le query SQL, le proprietà ,ad esempio , item.idfanno distinzione tra maiuscole e minuscole.

Annotazioni

__ (doppio carattere di sottolineatura) è un alias per getContext().getCollection() quando si usa l'API di query JavaScript.

SQL JavaScript Query API Descrizione
SELEZIONARE*
DALLA DOCUMENTAZIONE
__.map(function(doc) {
    restituire il documento;
});
Restituisce tutti i documenti (impaginati con token di continuazione) nella loro forma originale.
SELEZIONARE
   docs.id,
   docs.message AS msg,
   docs.actions
DALLA DOCUMENTAZIONE
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        azioni:doc.azioni
    };
});
Proietta gli ID, i messaggi (con alias "msg") e le azioni da tutti i documenti.
SELEZIONA *
Dalla documentazione
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Query per i documenti con il predicato: id = "X998_Y998".
SELEZIONARE*
DOCUMENTAZIONE DA
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Le query per i documenti che hanno una proprietà Tags, dove Tags è un array che contiene il valore 123.
SELECT
   docs.id,
   docs.message AS msg
DOCUMENTAZIONE FROM
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 per i documenti con un predicato, id = "X998_Y998" e quindi proietta l'ID e il messaggio (con alias a msg).
SELECT VALUE TAG
DALLA DOCUMENTAZIONE
Documentazione sul tag JOIN IN. Tag
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        restituisce doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        restituire doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Filtra i documenti che hanno una proprietà di array, Tags, e ordina i documenti risultanti in base alla proprietà di sistema del timestamp _ts, quindi proietta e appiana l'array Tags.

Passaggi successivi

Altre informazioni su concetti e procedure per scrivere e usare stored procedure, trigger e funzioni definite dall'utente in Azure Cosmos DB: