API de requête JavaScript dans Azure Cosmos DB

Outre l’émission de requêtes à l’aide de l’API pour NoSQL dans Azure Cosmos DB, le Kit de développement logiciel (SDK) côté serveur Azure Cosmos DB fournit une interface JavaScript pour effectuer des requêtes optimisées dans des procédures stockées et des déclencheurs Azure Cosmos DB. Vous n’avez pas besoin de connaître le langage SQL pour utiliser cette interface JavaScript. L’API de requête JavaScript vous permet de générer des requêtes par programmation en passant des fonctions de prédicat en séquence d’appels de fonction, avec une syntaxe similaire aux bibliothèques intégrées au tableau ECMAScript5 et aux bibliothèques JavaScript populaires comme 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]) Démarre un appel chaîné qui doit être arrêté avec 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 LINQ.
map(transformationFunction [, options] [, callback]) Applique une projection donnée à une fonction de transformation qui mappe chaque élément d’entrée à un objet ou une valeur JavaScript. Cette fonction se comporte comme une clause SELECT dans SQL.
pluck([propertyName] [, options] [, callback]) Cette fonction est un raccourci pour une carte qui extrait la valeur d’une propriété unique à partir 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 à l’aide du 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 à l’aide du 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]. Cela est similaire à SelectMany dans .NET LINQ.

Lorsqu’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, y compris le littéral de l’objet : {}
  • var, return

Les constructions JavaScript suivantes ne sont pas optimisées pour les index Azure Cosmos DB :

  • Flux de contrôle : ifforwhile
  • Appels de fonction

Pour plus d’informations, consultez la documentation JavaScript côté serveur Azure Cosmos DB.

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.

Note

__ (trait de soulignement double) est un alias pour getContext().getCollection() lorsqu'on utilise l'API de requête JavaScript.

SQL API de requête JavaScript Description
SÉLECTIONNEZ*
Provenant de 'docs'
__.map(function(doc) {
    document de retour ;
});
Renvoie tous les documents (paginés avec jeton de continuation) tels quels.
SÉLECTIONNEZ
   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.
SÉLECTIONNEZ*
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 ».
SÉLECTIONNEZ*
FROM docs
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1 ;
});
Requêtes pour les documents qui ont une propriété Tags, où 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) {
        retourne doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        retourner 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 de procédures pour écrire et utiliser des procédures stockées, des déclencheurs et des fonctions définies par l’utilisateur dans Azure Cosmos DB :