Compartir a través de


API de consulta de JavaScript en Azure Cosmos DB

Además de emitir consultas mediante 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 tener en cuenta el lenguaje SQL para usar esta interfaz de JavaScript. La API de consulta de JavaScript permite construir consultas de manera programática pasando funciones predicadas en una secuencia de llamadas de función, con una sintaxis similar a las matrices incorporadas de ECMAScript5 y bibliotecas populares de JavaScript como Lodash. El tiempo de ejecución de JavaScript analiza las consultas de manera eficiente y las ejecuta utilizando índices de Azure Cosmos DB.

Funciones de JavaScript admitidas

Function Descripción
chain() ... .value([callback] [, options]) Inicia una llamada encadenada que debe finalizarse con value().
filter(predicateFunction [, options] [, callback]) Filtra la entrada mediante una función de predicado que devuelve true/false para filtrar documentos de entrada y salida en el conjunto resultante. Esta función se comporta de forma similar a una cláusula WHERE en SQL.
flatten([isShallow] [, options] [, callback]) Combina y aplana matrices de cada elemento de entrada en una sola matriz. Esta función se comporta de forma similar a SelectMany en LINQ.
map(transformationFunction [, options] [, callback]) Aplica una proyección dada una función de transformación que asigna cada elemento de entrada a un objeto o valor de JavaScript. Esta función se comporta de forma similar a una cláusula SELECT en SQL.
pluck([propertyName] [, options] [, callback]) Esta función es un acceso directo para un mapa que extrae el valor de una sola propiedad de cada elemento de entrada.
sortBy([predicate] [, options] [, callback]) Genera un nuevo conjunto de documentos ordenando los documentos en el flujo de documento de entrada en orden ascendente mediante el predicado especificado. Esta función se comporta de forma similar a una cláusula ORDER BY en SQL.
sortByDescending([predicate] [, options] [, callback]) Genera un nuevo conjunto de documentos ordenando los documentos en la secuencia de documentos de entrada en orden descendente mediante el predicado especificado. Esta función se comporta de forma similar a una cláusula ORDER BY x DESC en SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Realiza una autocombinación con matriz interna y agrega resultados de ambos lados como tuplas a la proyección de resultados. Por ejemplo, unir un documento de persona con person.pets produciría una serie de tuplas en el formato [persona, mascota]. Esto es similar a SelectMany en LINQ de .NET.

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

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

Las siguientes construcciones de JavaScript no se optimizan para los í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.

Guía de referencia de SQL a JavaScript

En la tabla siguiente se presentan varias consultas SQL y las consultas de JavaScript correspondientes. Al igual que con las consultas SQL, las propiedades (por ejemplo, item.id) son sensibles a mayúsculas y minúsculas.

Nota:

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

SQL API de consulta de JavaScript Descripción
SELECCIONE*
Documentos FROM
__.map(function(doc) {
    return doc;
});
Da como resultado todos los documentos (paginados con token de continuación) tal como está.
Seleccionar
   docs.id,
   docs.message AS msg,
   docs.actions
Desde Documentos
__.map(function(doc) {
    return {
        id: doc.id,
        msg: documento.mensaje,
        acciones:doc.acciones
    };
});
Proyecta el identificador, el mensaje (con alias a msg) y la acción de todos los documentos.
SELECCIONE*
Desde Documentos
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Consultas para documentos con el predicado: id = "X998_Y998".
SELECCIONE*
Desde Documentos
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Consultas de documentos con una propiedad Tags, donde Tags es una matriz que contiene el valor 123.
SELECT
   docs.id,
   docs.message AS msg
Desde Documentos
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 con un predicado, id = "X998_Y998", y proyecta el identificador y el mensaje (como alias msg).
SELECT VALUE tag
Desde Documentos
Etiqueta JOIN EN documentos. Etiquetas
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 llamada Etiquetas, luego ordena los documentos resultantes por la propiedad del sistema de marca temporal _ts, y posteriormente proyecta y aplana la matriz de Etiquetas.

Pasos siguientes

Obtenga más información sobre conceptos y procedimientos para escribir y usar procedimientos almacenados, desencadenadores y funciones definidas por el usuario en Azure Cosmos DB: