Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Помимо выдачи запросов с помощью 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
Функция | Описание |
---|---|
chain() ... .value([callback] [, options]) |
Начинает вызов по цепочке, который необходимо завершать методом value(). |
filter(predicateFunction [, options] [, callback]) |
Фильтрует входные данные с помощью функции предиката, которая возвращает значение true или false для фильтрации входных документов в наборе результатов. Эта функция действует так же, как предложение WHERE в SQL. |
flatten([isShallow] [, options] [, callback]) |
Собирает и объединяет массивы для каждого входного элемента в один массив. Эта функция похожa на функцию 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:
- Поток управления:
if
for
while
- вызовы функций.
Дополнительные сведения см. в документации по JavaScript на стороне сервера Azure Cosmos DB.
Таблица соответствия запросов SQL и JavaScript
В следующей таблице представлены разные запросы SQL и соответствующие им запросы JavaScript. Как и в SQL-запросах, свойства (например, item.id
) чувствительны к регистру.
Примечание.
__
(двойное подчеркивание) является псевдонимом для getContext().getCollection()
при использовании API запросов JavaScript.
SQL | API запросов JavaScript | Описание |
---|---|---|
ВЫБИРАТЬ* ИЗ документов |
__.map(function(doc) { вернуть doc; }); |
Возвращает все документы (с разбивкой на страницы с отметками "продолжить"). |
ВЫБРАТЬ docs.id, docs.message AS msg, документы.действия ИЗ документов |
__.map(function(doc) { возвращается { id: doc.id, msg: doc.message, действия:документ.действия }; }); |
Создает проекцию идентификатора, сообщения (msg) и действия для всех документов. |
ВЫБИРАТЬ* ИЗ документов ГДЕ docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
Запрашивает документы с предикатом: id = "X998_Y998". |
ВЫБИРАТЬ* ИЗ документов ГДЕ =ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { return x.Tags && x.Tags.indexOf(123) > -1; }); |
Запрашивает все документы, имеющие свойство Tags. Tags является массивом, содержащим значение 123. |
ВЫБРАТЬ docs.id, docs.message AS msg ИЗ документов ГДЕ docs.id="X998_Y998" |
__.chain() .filter(function(doc) { return doc.id ==="X998_Y998"; }) .map(function(doc) { возвращается { id: doc.id, сообщение: doc.message }; }) .value(); |
Запрашивает документы с предикатом id = "X998_Y998" и затем выполняет проекцию идентификатора и сообщения (msg). |
Тег выбора значения ИЗ документов JOIN tag IN docs.Tags ORDER BY docs._ts (упорядочить по docs._ts) |
__.chain() .filter(function(doc) { return doc.Tags && Array.isArray(doc.Tags); }) .sortBy(function(doc) { return doc._ts; }) .pluck("Теги") .flatten() .value() |
Выполняет фильтрацию документов, у которых есть свойство массива Tags, сортирует полученные документы по системному свойству временной метки _ts, а затем выполняет проекцию и выравнивание массива Tags. |
Следующие шаги
Дополнительные сведения о том, как записать и использовать хранимые процедуры, триггеры и определяемые пользователем функции в Azure Cosmos DB, см. в статьях ниже:
- Как записывать хранимые процедуры и триггеры с помощью API запросов JavaScript
- Working with Azure Cosmos DB stored procedures, triggers, and user-defined functions (Работа с хранимыми процедурами, триггерами и определяемыми пользователем функциями в Azure Cosmos DB)
- Как зарегистрировать и использовать хранимые процедуры, триггеры и определяемые пользователем функции в Azure Cosmos DB
- Azure Cosmos DB JavaScript server-side API reference (Справочные материалы по API на стороне сервера для JavaScript Azure Cosmos DB)
- JavaScript ES6 (ECMA 2015)