API de consulta 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 em JavaScript para a execução de consultas otimizadas em procedimentos e gatilhos armazenados no 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 no runtime do JavaScript e executadas com eficiência usando índices do Azure Cosmos DB.
Funções do JavaScript com suporte
Função | Descrição |
---|---|
chain() ... .value([callback] [, options]) |
Inicia uma chamada encadeada que deve ser terminada com value(). |
filter(predicateFunction [, options] [, callback]) |
Filtra a entrada usando uma função de predicado que retorna true/false para filtrar documentos de entrada no conjunto resultante. Essa função se comporta semelhante a uma cláusula WHERE no SQL. |
flatten([isShallow] [, options] [, callback]) |
Combina e nivela as matrizes de cada item de entrada em uma única matriz. Essa função se comporta semelhante a uma cláusula 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. Essa função se comporta 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 ascendente usando o predicado fornecido. Essa função se comporta 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 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 a SelectMany no LINQ do .NET. |
Quando incluídas em funções de predicado e/ou do seletor, os constructos do JavaScript a seguir são automaticamente otimizados para serem executados diretamente nos índices do Azure Cosmos DB:
- Operadores simples:
=
+
-
*
/
%
|
^
&
==
!=
===
!==
<
>
<=
>=
||
&&
<<
>>
>>>
~
- Literais, incluindo o literal de objeto:
{}
- var, return
Os seguintes constructos do JavaScript não são otimizados pelos índices do Azure Cosmos DB:
- Fluxo de controle:
if
for
while
- Chamadas de função
Para saber mais, confira a Documentação do JavaScript do lado 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 com consultas SQL, as propriedades (por exemplo, item.id
) diferenciam maiúsculas de minúsculas.
Observação
__
(sublinhado duplo) é um alias para getContext().getCollection()
ao usar a API de consulta do JavaScript.
SQL | API de Consulta do JavaScript | Descrição |
---|---|---|
SELECIONAR * FROM docs |
__.map(function(doc) { return doc; }); |
Resulta em todos os documentos (paginados com token de continuação) no estado em que se encontram. |
SELECT docs.id, docs.message AS msg, docs.actions FROM docs |
__.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 * FROM docs WHERE docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
Consulta documentos com o predicado : id = "X998_Y998". |
SELECIONAR * FROM docs 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 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(); |
Consulta documentos com um predicado, id = "X998_Y998" e projeta a ID e a mensagem (com alias para 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 documentos que têm uma propriedade de matriz, Tags, e classifica os documentos resultantes pela propriedade do sistema do carimbo de data/hora _ts e projeta + mescla a matriz Tags. |
Próximas etapas
Conheça mais conceitos e saiba como escrever e usar procedimentos armazenados, gatilhos e funções definidas pelo usuário no Azure Cosmos DB:
- Como criar procedimentos armazenados e gatilhos usando a API de Consulta JavaScript
- Trabalhando com procedimentos armazenados, gatilhos e funções definidas pelo usuário do Azure Cosmos DB
- Como usar procedimentos armazenados, gatilhos e funções definidas pelo usuário no Azure Cosmos DB
- Referência de API do lado do servidor JavaScript do Azure Cosmos DB
- JavaScript ES6 (ECMA 2015)