API de consulta do JavaScript no Azure Cosmos DB

APLICA-SE A: NoSQL

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 em 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 JavaScript permite que você crie consultas programaticamente passando funções de predicado para a sequência de chamadas de função, com uma sintaxe semelhante à matriz integrada do ECMAScript5 e bibliotecas JavaScript populares como Lodash. As consultas são analisadas pelo tempo de execução do JavaScript e executadas de forma eficiente usando os índices do Azure Cosmos DB.

Funções JavaScript suportadas

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 e saída no conjunto resultante. Esta 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. Esta função comporta-se de forma semelhante a SelectMany no LINQ.
map(transformationFunction [, options] [, callback]) Aplica uma projeção dada uma função de transformação que mapeia cada item de entrada para um objeto ou valor JavaScript. Esta função se comporta de forma semelhante a uma cláusula SELECT no 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 classificando os documentos no fluxo de documentos de entrada em ordem crescente usando o predicado fornecido. Esta função se comporta de forma semelhante a uma cláusula ORDER BY em 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. Esta função se comporta de forma semelhante a uma cláusula ORDER BY x DESC no SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Executa uma auto-junção com matriz interna e adiciona resultados de ambos os lados como tuplas à projeção de resultados. Por exemplo, juntar um documento de pessoa com person.pets produziria tuplas [pessoa, animal de estimação]. Isso é semelhante ao SelectMany no .NET LINQ.

Quando incluídas dentro de funções de predicado e/ou seletor, as seguintes construções JavaScript são automaticamente otimizadas para serem executadas diretamente nos índices do Azure Cosmos DB:

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

As seguintes construções JavaScript não são otimizadas para índices do Azure Cosmos DB:

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

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

Folha de cheat de SQL para JavaScript

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

Nota

__ (double-underscore) é um alias para getContext().getCollection() ao usar a API de consulta JavaScript.

SQL API de consulta JavaScript Descrição
SELECIONAR *
DE docs
__.map(function(doc) {
    doc de retorno;
});
Resulta em todos os documentos (paginados com token de continuação) como estão.
SELECIONAR
   docs.id,
   docs.message como msg,
   docs.ações
DE docs
__.map(function(doc) {
    return {
        Identificação: doc.id,
        Msg: doc.message,
        ações:doc.actions
    };
});
Projeta o id, a mensagem (aliased para msg) e a ação de todos os documentos.
SELECIONAR *
DE docs
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    retorno doc.id ==="X998_Y998";
});
Consultas de documentos com o predicado: id = "X998_Y998".
SELECIONAR *
DE docs
WHERE
   ARRAY_CONTAINS(Docs. Tags, 123)
__.filter(function(x) {
    retornar x.Tags && x.Tags.indexOf(123) > -1;
});
Consultas para documentos que têm uma propriedade Tags e Tags é uma matriz que contém o valor 123.
SELECIONAR
   docs.id,
   docs.message como msg
DE docs
WHERE
   docs.id="X998_Y998"
__.cadeia()
    .filter(function(doc) {
        retorno doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       return {
            Identificação: doc.id,
            Msg: doc.message
       };
    })
.valor();
Consulta documentos com um predicado, id = "X998_Y998" e, em seguida, projeta o id e a mensagem (aliased para msg).
Tag SELECT VALUE
DE docs
JOIN tag IN docs. Etiquetas
ENCOMENDAR POR docs._ts
__.cadeia()
    .filter(function(doc) {
        devolver doc. Tags && Array.isArray(doc. Tags);
    })
    .sortBy(function(doc) {
        retorno doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .valor()
Filtra documentos que têm uma propriedade de matriz, Tags, e classifica os documentos resultantes pela propriedade _ts sistema de carimbo de data/hora e, em seguida, projeta + nivela a matriz Tags.

Próximos passos

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