Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Помимо выдачи запросов с помощью 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:
- Создание хранимых процедур и триггеров с помощью API запросов JavaScript
- Работа с хранимыми процедурами Azure Cosmos DB, триггерами и определяемыми пользователем функциями
- Использование хранимых процедур, триггеров, определяемых пользователем функций в Azure Cosmos DB
- Справочник по API JavaScript на стороне сервера Azure Cosmos DB
- JavaScript ES6 (ECMA 2015)