Partilhar via


API de consulta JavaScript em Azure Cosmos DB

Para além de emitir consultas usando a API para NoSQL no Azure Cosmos DB, o SDK servidor do Azure Cosmos DB fornece uma interface JavaScript para realizar consultas otimizadas nos Stored Procedures and Triggers do Azure Cosmos DB. Não precisa de conhecer a linguagem SQL para usar esta interface JavaScript. A API de consulta JavaScript permite-lhe construir consultas programaticamente passando funções de predicado em sequência de chamadas de funções, com uma sintaxe semelhante às matrizes incorporadas no ECMAScript5 e às populares bibliotecas JavaScript como o Lodash. As consultas são analisadas pelo tempo de execução JavaScript e executadas de forma eficiente usando índices do Azure Cosmos DB.

Funções JavaScript suportadas

Function Descrição
chain() ... .value([callback] [, options]) Inicia uma chamada encadeada que deve ser terminada com value().
filter(predicateFunction [, options] [, callback]) Filtra os documentos de entrada usando uma função de predicado que devolve verdadeiro ou falso, para incluir ou excluir documentos no conjunto resultante. Esta função comporta-se de forma semelhante a uma cláusula WHERE em SQL.
flatten([isShallow] [, options] [, callback]) Combina e achata os arrays de cada item de entrada num único array. Esta função comporta-se de forma semelhante ao SelectMany no LINQ.
map(transformationFunction [, options] [, callback]) Aplica uma projeção utilizando uma função de transformação que mapeia cada item de entrada para um objeto ou valor JavaScript. Esta função comporta-se de forma semelhante a uma cláusula SELECT em SQL.
pluck([propertyName] [, options] [, callback]) Esta função é um atalho para um mapa que extrai o valor de uma única propriedade de cada item de entrada.
sortBy([predicate] [, options] [, callback]) Produz um novo conjunto de documentos ordenando os documentos no fluxo de documentos de entrada por ordem crescente usando o predicado indicado. Esta função comporta-se de forma semelhante a uma cláusula ORDER BY em SQL.
sortByDescending([predicate] [, options] [, callback]) Produz um novo conjunto de documentos ordenando os documentos do fluxo de documentos de entrada por ordem decrescente usando o predicado dado. Esta função comporta-se de forma semelhante a uma cláusula ORDER BY x DESC em SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Realiza uma auto-junção com array interior e soma resultados de ambos os lados como tuplas à projeção resultante. Por exemplo, juntar um documento person com person.pets produziria tuplas [pessoa, animal]. Isto é semelhante ao SelectMany no .NET LINQ.

Quando incluídos dentro de funções de predicado e/ou seletor, os seguintes construtos JavaScript são automaticamente otimizados para correr diretamente nos índices do Azure Cosmos DB:

  • Operadores simples: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literais, incluindo o objeto literal: {}
  • var, return

Os seguintes construtos JavaScript não são otimizados para índices do Azure Cosmos DB:

  • Controlo do fluxo: ifforwhile
  • Chamadas de função

Para mais informações, consulte a Documentação de JavaScript do Lado do Servidor do Azure Cosmos DB.

Folha de dicas de SQL para JavaScript

A tabela seguinte apresenta várias consultas SQL e as respetivas consultas JavaScript. Tal como nas consultas SQL, as propriedades (por exemplo, item.id) são sensíveis a maiúsculas e minúsculas.

Observação

__ (duplo sublinhado) é um alias para getContext().getCollection() quando se utiliza a API de consulta JavaScript.

SQL API de Consulta JavaScript Descrição
SELECT *
DE documentação
__.map(função(doc) {
    devolver o documento;
});
Os resultados em todos os documentos (paginados com token de continuação) tal como está.
SELECIONAR
   docs.id,
   docs.message AS msg,
   docs.actions
DA documentação
__.map(function(doc) {
    return {
        id: doc.id,
        MSG: Doc.Message,
        Ações:Doc.Ações
    };
});
Projeta o id, a mensagem (aliasada para msg) e a ação de todos os documentos.
SELECT *
DA documentação
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Consultas de documentos que possuem o predicado: id = "X998_Y998".
SELECT *
DA documentação
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(função(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Consultas para documentos que possuem uma propriedade Tags, sendo que Tags é um array que contém o valor 123.
SELECT
   docs.id,
   docs.message AS MSG
DA documentação
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();
Consultas para documentos com um predicado, id = "X998_Y998", e depois projeta o id e a mensagem (apelidada de msg).
SELECIONAR ETIQUETA DE VALOR
DA documentação
JOIN tag IN documentação. Etiquetas
ORDEM POR docs._ts
__.chain()
    .filter(function(doc) {
        return doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        retorno doc._ts;
    })
    .extrair("Etiquetas")
    .flatten()
    .value()
Filtra documentos que possuem uma propriedade de array chamada Tags, ordena os documentos resultantes pela propriedade de sistema _ts (carimbo temporal) e, em seguida, projeta e achata o array de Tags.

Próximos passos

Aprenda mais conceitos e como escrever e usar procedimentos armazenados, triggers e funções definidas pelo utilizador no Azure Cosmos DB: