API de consulta de JavaScript en Azure Cosmos DB

SE APLICA A: NoSQL

Además de emitir consultas con la API para NoSQL en Azure Cosmos DB, el SDK del lado servidor de Azure Cosmos DB proporciona una interfaz de JavaScript para realizar consultas optimizadas en procedimientos almacenados y desencadenadores de Azure Cosmos DB. No es necesario conocer el lenguaje SQL para utilizar esta interfaz JavaScript. JavaScript Query API permite crear mediante programación consultas pasando las funciones de predicado a una secuencia de llamadas de función, con una sintaxis similar a la de los elementos integrados de matriz de ECMAScript5 y conocidas bibliotecas de JavaScript, como Lodash. Las consultas se analizan con el entorno de ejecución de JavaScript para que se ejecuten eficazmente mediante índices de Azure Cosmos DB.

Funciones JavaScript admitidas

Function Descripción
chain() ... .value([callback] [, options]) Inicia una llamada encadenada que debe terminarse con value().
filter(predicateFunction [, options] [, callback]) Filtra la entrada usando una función de predicado que devuelve True o False para filtrar los documentos de entrada y salida en el conjunto resultante. Esta función es similar a la de una cláusula WHERE de SQL.
flatten([isShallow] [, options] [, callback]) Combina y reduce las matrices de cada elemento de entrada en una sola matriz. Esta función es similar a la de SelectMany de LINQ.
map(transformationFunction [, options] [, callback]) Aplica a una proyección dada una función de transformación que asigna cada elemento de entrada a un valor u objeto de JavaScript. Esta función es similar a la de una cláusula SELECT de SQL.
pluck([propertyName] [, options] [, callback]) Esta función es un acceso directo a una asignación que extrae el valor de una única propiedad de cada elemento de entrada.
sortBy([predicate] [, options] [, callback]) Genera un nuevo conjunto de documentos al clasificarlos en orden ascendente en la secuencia de documentos de entrada mediante el predicado especificado. Esta función es similar al de una cláusula ORDER BY de SQL.
sortByDescending([predicate] [, options] [, callback]) Produce un nuevo conjunto de documentos al clasificarlos en orden descendente en la secuencia de documentos de entrada mediante el predicado especificado. Esta función es similar a la de una cláusula ORDER BY x DESC de SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Realiza una autocombinación con matriz interna y agrega los resultados de ambos lados como tuplas a la proyección del resultado. Por ejemplo, al unir un documento de una persona con un documento de mascota, se producirían tuplas [persona,mascota]. Esto es similar a SelectMany de .NET LINQ.

Cuando se incluye dentro del predicado o las funciones selectoras, las siguientes construcciones de JavaScript se optimizan automáticamente para ejecutarse directamente en índices de Azure Cosmos DB:

  • Operadores simples: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literales, incluido el literal de objeto: {}
  • var, return

Las siguientes construcciones de JavaScript no se optimizan para índices de Azure Cosmos DB:

  • Flujo de control: ifforwhile
  • Llamadas de función

Para más información, consulte la documentación de JavaScript del lado servidor de Azure Cosmos DB.

Hoja de referencia de SQL a JavaScript

En la tabla siguiente se muestran varias consultas SQL con las consultas de JavaScript correspondientes. Como sucede con las consultas SQL, las propiedades (por ejemplo, item.id) distinguen mayúsculas de minúsculas.

Nota:

__ (subrayado doble) es un alias para getContext().getCollection() cuando se usa JavaScript Query API.

SQL JavaScript Query API Descripción
SELECT *
FROM docs
__.map(function(doc) {
    return doc;
});
Devuelve resultados de todos los documentos (paginados con el token de continuación) tal y como están.
SELECT
   docs.id,
   docs.message AS msg,
   docs.actions
FROM docs
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Proyecta el id., el mensaje (con el alias msg) y la acción de todos los documentos.
SELECT *
FROM docs
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Realiza consultas de los documentos con el predicado: id = "X998_Y998".
SELECT *
FROM docs
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Realiza consultas de los documentos que tengan una propiedad Tags que sea una matriz que contiene el 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();
Realiza consultas de los documentos con un predicado, id = "X998_Y998", y, después, proyecta el id. y el mensaje (con el 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()
Filtra los documentos que tienen una propiedad de matriz, Tags, y ordena los documentos resultantes por la propiedad del sistema _ts timestamp; después, proyecta + flattens en la matriz Tags.

Pasos siguientes

Aprenda más conceptos y cómo escribir y utilizar procedimientos almacenados, desencadenadores y funciones definidas por el usuario en Azure Cosmos DB: