API de requête JavaScript dans Azure Cosmos DB
S’APPLIQUE À : NoSQL
Outre l’émission de requêtes à l’aide de l’API pour NoSQL dans Azure Cosmos DB, le kit SDK côté serveur Azure Cosmos DB fournit une interface JavaScript pour exécuter des requêtes optimisées dans les procédures stockées et déclencheurs Azure Cosmos DB. Vous n’êtes pas obligé de connaître le langage SQL pour utiliser cette interface JavaScript. L’API de requête JavaScript permet de créer des requêtes par programmation, en transmettant des fonctions de prédicat dans une séquence d’appels de fonction, avec une syntaxe usuelle des types prédéfinis de tableau ECMAScript5 et des bibliothèques JavaScript courantes, telles que Lodash. Les requêtes sont analysées par le runtime JavaScript et exécutées efficacement à l’aide d’index Azure Cosmos DB.
Fonctions JavaScript prises en charge
Fonction | Description |
---|---|
chain() ... .value([callback] [, options]) |
Commence un appel chaîné qui doit se terminer par value(). |
filter(predicateFunction [, options] [, callback]) |
Filtre l’entrée à l’aide d’une fonction de prédicat qui renvoie true/false afin de filtrer les documents d’entrée dans le jeu résultant. Cette fonction se comporte comme une clause WHERE dans SQL. |
flatten([isShallow] [, options] [, callback]) |
Combine et aplatit les tableaux à partir de chaque élément d’entrée en un seul tableau. Cette fonction se comporte comme SelectMany dans SQL. |
map(transformationFunction [, options] [, callback]) |
Applique une projection à partir d’une fonction de transformation qui mappe chaque élément d’entrée à une valeur ou un objet JavaScript. Cette fonction se comporte comme une clause SELECT dans SQL. |
pluck([propertyName] [, options] [, callback]) |
Cette fonction est un raccourci pour un mappage qui extrait la valeur d’une propriété unique de chaque élément d’entrée. |
sortBy([predicate] [, options] [, callback]) |
Produit un nouvel ensemble de documents, en triant les documents dans le flux de documents d’entrée, dans l’ordre croissant avec le prédicat donné. Cette fonction se comporte comme une clause ORDER BY dans SQL. |
sortByDescending([predicate] [, options] [, callback]) |
Produit un nouvel ensemble de documents, en triant les documents dans le flux de documents d’entrée, dans l’ordre décroissant avec le prédicat donné. Cette fonction se comporte comme une clause ORDER BY x DESC dans SQL. |
unwind(collectionSelector, [resultSelector], [options], [callback]) |
Effectue une jointure réflexive avec tableau interne et ajoute les résultats des deux côtés, sous forme de tuples, à la projection de résultats. Par exemple, joindre un document person avec person.pets produirait des tuples [person, pet]. Ce comportement est semblable à SelectMany dans .NET LINQ. |
Quand elles sont incluses dans les fonctions de prédicat et/ou de sélecteur, les constructions JavaScript suivantes sont automatiquement optimisées pour s’exécuter directement sur les index Azure Cosmos DB :
- Opérateurs simples :
=
+
-
*
/
%
|
^
&
==
!=
===
!==
<
>
<=
>=
||
&&
<<
>>
>>>
~
- Littéraux, notamment le littéral d’objet :
{}
- var, return
Les constructions JavaScript suivantes ne sont pas optimisées pour les index Azure Cosmos DB :
- Flux de contrôle :
if
for
while
- Appels de fonction
Pour plus d’informations, consultez la documentation JavaScript Azure Cosmos DB côté serveur.
Aide-mémoire SQL vers JavaScript
Le tableau suivant présente différentes requêtes SQL et les requêtes JavaScript correspondantes. Comme pour les requêtes SQL, les propriétés (par exemple, item.id
) respectent la casse.
Remarque
__
(trait de soulignement double) est un alias pour getContext().getCollection()
lors de l’utilisation de l’API de requête JavaScript.
SQL | API de requête JavaScript | Description |
---|---|---|
SELECT * FROM docs |
__.map(function(doc) { return doc; }); |
Renvoie tous les documents (paginés avec jeton de continuation) tels quels. |
SELECT docs.id, docs.message AS msg, docs.actions FROM docs |
__.map(function(doc) { return { id: doc.id, msg: doc.message, actions:doc.actions }; }); |
Projette l’ID, le message (alias msg) et l’action de tous les documents. |
SELECT * FROM docs WHERE docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
Requêtes pour les documents avec le prédicat : id = "X998_Y998". |
SELECT * FROM docs WHERE ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { return x.Tags && x.Tags.indexOf(123) > -1; }); |
Requêtes pour les documents comportant une propriété Tags, et Tags est un tableau contenant la valeur 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(); |
Interroge les documents avec un prédicat, id = "X998_Y998", puis projette l’ID et le message (alias 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() |
Filtre les documents comportant une propriété de tableau, Tags, trie les documents résultants par la propriété système _ts timestamp, puis projette et aplatit le tableau Tags. |
Étapes suivantes
Découvrez plus de concepts, et comment écrire et utiliser procédures stockées, déclencheurs et fonctions définies par l’utilisateur dans Azure Cosmos DB :
- Guide pratique pour écrire des procédures stockées et des déclencheurs en utilisant l’API de requête JavaScript
- Utilisation des procédures stockées, déclencheurs et fonctions définies par l’utilisateur dans Azure Cosmos DB
- Guide pratique pour utiliser des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur dans Azure Cosmos DB
- Référence d’API serveur Javascript Azure Cosmos DB
- ES6 de JavaScript (ECMA 2015)