API запросов JavaScript в Azure Cosmos DB

Помимо выдачи запросов с помощью API для NoSQL в Azure Cosmos DB, пакет SDK на стороне сервера Azure Cosmos DB предоставляет интерфейс JavaScript для выполнения оптимизированных запросов в хранимых процедурах и триггерах Azure Cosmos DB. Вам не нужно знать язык SQL для использования этого интерфейса JavaScript. API запросов JavaScript позволяет программно создавать запросы путем передачи функций предиката в последовательность вызовов функций с синтаксисом, аналогичным встроенным массивам ECMAScript5 и популярным библиотекам JavaScript, таким как Lodash. Запросы анализируются средой выполнения JavaScript и эффективно выполняются с помощью индексов Azure Cosmos DB.

Поддерживаемые функции JavaScript

Функция Description
chain() ... .value([callback] [, options]) Запускает цепочку вызовов, которая должна быть завершена вызовом метода value().
filter(predicateFunction [, options] [, callback]) Фильтрует входные данные с помощью функции предиката, возвращающей значение true/false, чтобы отфильтровать входные документы в результирующем наборе. Эта функция работает аналогично предложению WHERE в SQL.
flatten([isShallow] [, options] [, callback]) Объединяет и преобразует массивы из каждого входного элемента в один плоский массив. Эта функция работает аналогично SelectMany в LINQ.
map(transformationFunction [, options] [, callback]) Применяет проекцию, заданную функцией преобразования, которая сопоставляет каждый входной элемент с объектом или значением JavaScript. Эта функция работает аналогично предложению SELECT в SQL.
pluck([propertyName] [, options] [, callback]) Эта функция служит сокращением для отображения, которое извлекает значение одного свойства из каждого входного элемента.
sortBy([predicate] [, options] [, callback]) Создает новый набор документов путем сортировки документов в потоке входных документов в порядке возрастания с помощью заданного предиката. Эта функция работает аналогично предложению ORDER BY в SQL.
sortByDescending([predicate] [, options] [, callback]) Создает новый набор документов путем сортировки документов в потоке входных документов в порядке убывания с помощью заданного предиката. Эта функция работает аналогично предложению ORDER BY x DESC в SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Выполняет самосоединение по внутреннему массиву и добавляет результаты из обоих источников как кортежи в проекцию результата. Например, объединение документа человека с person.pets будет создавать кортежи [person, pet]. Это похоже на SelectMany в .NET LINQ.

При включении в функции предиката и (или) селектора следующие конструкции JavaScript автоматически оптимизированы для запуска непосредственно в индексах Azure Cosmos DB:

  • Простые операторы: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Литералы, включая литерал объекта: {}
  • var, return

Следующие конструкции JavaScript не оптимизированы для индексов Azure Cosmos DB:

  • Поток управления: ifforwhile
  • Вызовы функций

Дополнительные сведения см. в документации по JavaScript на стороне сервера Azure Cosmos DB.

Шпаргалка по SQL для пользователей JavaScript

В следующей таблице представлены различные запросы SQL и соответствующие запросы JavaScript. Как и в sql-запросах, свойства (например, item.id) чувствительны к регистру.

Замечание

__ (двойное подчеркивание) — это псевдоним для getContext().getCollection() при использовании API запросов JavaScript.

SQL API запросов JavaScript Description
ВЫБЕРИТЕ*
Из документации
__.map(function(doc) {
    вернуть doc
});
Приводит ко всем документам (с разбивкой на страницы с маркером продолжения).
ВЫБЕРИТЕ
   docs.id,
   docs.message AS msg,
   docs.actions
Из документации
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Проецирует идентификатор, сообщение под именем msg и действие из всех документов.
ВЫБЕРИТЕ*
Из документации
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Запросы к документам с предикатом: id = "X998_Y998".
ВЫБЕРИТЕ*
Из документации
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Запросы к документам с свойством Tags и Тегами — это массив, содержащий значение 123.
SELECT
   docs.id,
   docs.message AS msg
Из документации
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();
Запрашивает документы с предикатом, id = "X998_Y998", а затем выбирает id и сообщение, псевдонимизируя его в msg.
Тег SELECT VALUE
Из документации
Присоединить тег в docs.Tags
УПОРЯДОЧИТЬ ПО docs._ts
__.chain()
    .filter(function(doc) {
        return doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        return doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Фильтрует документы с массивом свойств Tags и сортирует полученные документы по системному свойству метки времени _ts, а затем проецирует и разворачивает массив Tags.

Дальнейшие действия

Дополнительные понятия и инструкции по написанию и использованию хранимых процедур, триггеров и определяемых пользователем функций в Azure Cosmos DB: