Compartilhar via


API de consulta JavaScript no Azure Cosmos DB

Além de emitir consultas usando a API para NoSQL no Azure Cosmos DB, o SDK do lado do servidor do Azure Cosmos DB fornece uma interface JavaScript para executar consultas otimizadas nos Procedimentos Armazenados e Gatilhos do Azure Cosmos DB. Você não precisa estar ciente da linguagem SQL para usar essa interface JavaScript. A API de consulta do JavaScript permite a você criar consultas de forma programática passando funções de predicado em uma sequência de chamadas de função, com uma sintaxe similar para bibliotecas JavaScript internas e populares da matriz do ECMAScript5, como Lodash. As consultas são analisadas pelo runtime do JavaScript e executadas com eficiência usando índices do Azure Cosmos DB.

Funções JavaScript com suporte

Função Descrição
chain() ... .value([callback] [, options]) Inicia uma chamada encadeada que deve ser encerrada com value().
filter(predicateFunction [, options] [, callback]) Filtra a entrada usando uma função de predicado que retorna true/false para filtrar documentos de entrada/saída no conjunto resultante. Essa função se comporta de forma semelhante a uma cláusula WHERE no SQL.
flatten([isShallow] [, options] [, callback]) Combina e nivela matrizes de cada item de entrada em uma única matriz. Essa função se comporta de forma semelhante a SelectMany no LINQ.
map(transformationFunction [, options] [, callback]) Aplica uma projeção determinada a uma função de transformação que mapeia cada item de entrada para um objeto ou valor JavaScript. Essa função se comporta de forma semelhante a uma cláusula SELECT no SQL.
pluck([propertyName] [, options] [, callback]) Essa 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 classificando os documentos no fluxo de documentos de entrada em ordem crescente usando o predicado fornecido. Essa função se comporta de forma semelhante a uma cláusula ORDER BY no SQL.
sortByDescending([predicate] [, options] [, callback]) Produz um novo conjunto de documentos classificando os documentos no fluxo de documentos de entrada em ordem decrescente usando o predicado fornecido. Essa função se comporta de forma semelhante a uma cláusula ORDER BY x DESC no SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Executa uma autojunção com a matriz interna e adiciona os resultados de ambos os lados como tuplas à projeção de resultados. Por exemplo, o ingresso de um documento de pessoas com person.pets produzirá as tuplas [pessoas, animais de estimação]. Isso é semelhante ao SelectMany no LINQ do .NET.

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

  • Operadores simples: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literais, incluindo o literal de objeto: {}
  • var (variável), return (retornar)

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

  • Fluxo de controle: ifforwhile
  • Chamadas de função

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

Folha de referências do SQL para JavaScript

A tabela a seguir apresenta várias consultas SQL e as consultas JavaScript correspondentes. Assim como acontece nas consultas SQL, as propriedades (por exemplo, item.id) diferenciam maiúsculas de minúsculas.

Observação

__ (sublinhado duplo) é um apelido para getContext().getCollection() ao usar a API de consulta JavaScript.

SQL API de Consulta JavaScript Descrição
SELECIONAR *
FROM docs
__.map(function(doc) {
    return doc;
});
Resulta em todos os documentos (paginados com o token de continuação) no estado em que se encontram.
SELECIONE
   docs.id,
   docs.message AS msg,
   docs.actions
Documentação do FROM
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Projeta a ID, a mensagem (com o alias msg) e a ação de todos os documentos.
SELECIONAR *
Documentação do FROM
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    retornar doc.id ==="X998_Y998";
});
Consultas sobre documentos com o predicado: id = "X998_Y998".
SELECIONAR *
Documentação do FROM
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Consulta documentos com uma propriedade Tags, e Tags é uma matriz que contém o valor 123.
SELECT
   docs.id,
   docs.message AS msg
Documentação do FROM
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        retornar doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       return {
            id: doc.id,
            msg: doc.message
       };
    })
.value();
Consulta documentos com um predicado, id = "X998_Y998" e projeta a ID e a mensagem (com o alias msg).
Tag SELECT VALUE
Documentação do FROM
JOIN tag IN docs.Tags
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        return doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        retorne doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Filtra documentos que têm a propriedade de matriz Tags, classifica os documentos resultantes pela propriedade do sistema do carimbo de data/hora _ts e projeta e mescla a matriz Tags.

Próximas etapas

Saiba mais sobre conceitos e como escrever e usar procedimentos armazenados, gatilhos e funções definidas pelo usuário no Azure Cosmos DB: