Azure Cosmos DB для MongoDB (версия сервера 4.2): поддерживаемые функции и синтаксис

Область применения: Mongodb

Azure Cosmos DB — это глобально распределенная служба базы данных с несколькими моделями Майкрософт. Azure Cosmos DB предлагает несколько API базы данных. Вы можете взаимодействовать с Azure Cosmos DB для MongoDB с помощью любого из клиентских драйверов MongoDB с открытым исходным кодом. Azure Cosmos DB для MongoDB поддерживает использование существующих драйверов клиентов путем подключения к протоколу проводной передачи MongoDB.

Используя Azure Cosmos DB для MongoDB, вы можете воспользоваться преимуществами MongoDB, которые вы используете, со всеми корпоративными возможностями, предоставляемыми Azure Cosmos DB: глобальное распределение, автоматическое сегментирование, гарантии доступности и задержки, шифрование неактивных данных, резервные копии и многое другое.

Поддержка протоколов

В этой статье перечислены поддерживаемые операторы, а также ограничения и исключения. Любой драйвер клиента, который понимает эти протоколы, должен иметь возможность подключаться к Azure Cosmos DB для MongoDB. При создании учетных записей Azure Cosmos DB для MongoDB версия учетных записей 3.6+ имеет конечную точку в формате *.mongo.cosmos.azure.com. Версия учетных записей 3.2 имеет конечную точку в формате *.documents.azure.com.

Примечание.

В этой статье перечислены только поддерживаемые команды сервера и исключены функции оболочки на стороне клиента. Функции оболочки на стороне клиента, такие как deleteMany() и updateMany() внутренние команды, используются delete() и update() серверные команды. Функции, использующие поддерживаемые команды сервера, совместимы с Azure Cosmos DB для MongoDB.

Поддержка языка запросов

Azure Cosmos DB для MongoDB обеспечивает комплексную поддержку конструкций языка запросов MongoDB. В следующих разделах можно найти подробный список поддерживаемых в настоящее время операций, операторов, этапов, команд и параметров.

Команды базы данных

Azure Cosmos DB для MongoDB поддерживает следующие команды базы данных.

Команды для запросов и записи

Команда Поддерживается
change streams Да
delete Да
eval Нет
find Да
findAndModify Да
getLastError Да
getMore Да
getPrevError Нет
insert Да
parallelCollectionScan Нет
resetError Нет
update Да

Команды транзакций

Примечание.

Транзакции с несколькими документами поддерживаются только в одной не сегментированной коллекции. Транзакции с несколькими документами между коллекциями и между сегментами еще не поддерживаются в API для MongoDB.

Команда Поддерживается
abortTransaction Да
commitTransaction Да

Команды для аутентификации

Команда Поддерживается
authenticate Да
getnonce Да
logout Да

Команды для администрирования

Команда Поддерживается
cloneCollectionAsCapped No
collMod Нет
connectionStatus Нет
convertToCapped Нет
copydb Нет
create Да
createIndexes Да
currentOp Да
drop Да
dropDatabase Да
dropIndexes Да
filemd5 Да
killCursors Да
killOp Нет
listCollections Да
listDatabases Да
listIndexes Да
reIndex Да
renameCollection Нет

Команды для диагностики

Команда Поддерживается
buildInfo Да
collStats Да
connPoolStats Нет
connectionStatus Нет
dataSize Нет
dbHash Нет
dbStats Да
explain Да
features Нет
hostInfo Да
listDatabases Да
listCommands Нет
profiler Нет
serverStatus Нет
top Нет
whatsmyuri Да

Конвейер агрегирования

Azure Cosmos DB для MongoDB поддерживает следующие команды агрегирования.

Команды статистической обработки

Команда Поддерживается
aggregate Да
count Да
distinct Да
mapReduce Нет

Этапы статистической обработки

Команда Поддерживается
addFields Да
bucket Нет
bucketAuto Нет
changeStream Да
collStats Нет
count Да
currentOp Нет
facet Да
geoNear Да
graphLookup Нет
group Да
indexStats Нет
limit Да
listLocalSessions Нет
listSessions No
lookup Частично
match Да
merge Да
out Да
planCacheStats Да
project Да
redact Да
regexFind Да
regexFindAll Да
regexMatch Да
replaceRoot Да
replaceWith Да
sample Да
set Да
skip Да
sort Да
sortByCount Да
unset Да
unwind Да

Примечание.

$lookup Агрегат еще не поддерживает функцию некорректных вложенных запросов, представленную в серверной версии 3.6. Если вы пытаетесь использовать оператор с let полями, pipeline появится сообщение об ошибке, указывающее, что let оно не поддерживается.$lookup

Логические выражения

Команда Поддерживается
and Да
not Да
or Да

Выражения преобразования

Команда Поддерживается
convert Да
toBool Да
toDate Да
toDecimal Да
toDouble Да
toInt Да
toLong Да
toObjectId Да
toString Да

Выражения для наборов

Команда Поддерживается
setEquals Да
setIntersection Да
setUnion Да
setDifference Да
setIsSubset Да
anyElementTrue Да
allElementsTrue Да

Выражения сравнения

Примечание.

API для MongoDB не поддерживает выражения сравнения, имеющие литерал массива в запросе.

Команда Поддерживается
cmp Да
eq Да
gt Да
gte Да
lt Да
lte Да
ne Да
in Да
nin Да

Арифметические выражения

Команда Поддерживается
abs Да
add Да
ceil Да
divide Да
exp Да
floor Да
ln Да
log Да
log10 Да
mod Да
multiply Да
pow Да
round Да
sqrt Да
subtract Да
trunc Да

Тригонометрические выражения

Команда Поддерживается
acos Да
acosh Да
asin Да
asinh Да
atan Да
atan2 Да
atanh Да
cos Да
cosh Да
degreesToRadians Да
radiansToDegrees Да
sin Да
sinh Да
tan Да
tanh Да

Строковые выражения

Команда Поддерживается
concat Да
indexOfBytes Да
indexOfCP Да
ltrim Да
rtrim Да
trim Да
split Да
strLenBytes Да
strLenCP Да
strcasecmp Да
substr Да
substrBytes Да
substrCP Да
toLower Да
toUpper Да

Оператор поиска в тексте

Команда Поддерживается
meta No

Выражения для массивов

Команда Поддерживается
arrayElemAt Да
arrayToObject Да
concatArrays Да
filter Да
indexOfArray Да
isArray Да
objectToArray Да
range Да
reverseArray Да
reduce Да
size Да
slice Да
zip Да
in Да

Операторы переменных

Команда Поддерживается
map Да
let Да

Системные переменные

Команда Поддерживается
$$CLUSTERTIME Да
$$CURRENT Да
$$DESCEND Да
$$KEEP Да
$$NOW Да
$$PRUNE Да
$$REMOVE Да
$$ROOT Да

Литеральный оператор

Команда Поддерживается
literal Да

Выражения для дат

Команда Поддерживается
dayOfYear Да
dayOfMonth Да
dayOfWeek Да
year Да
month Да
week Да
hour Да
minute Да
second Да
millisecond Да
dateToString Да
isoDayOfWeek Да
isoWeek Да
dateFromParts Да
dateToParts Да
dateFromString Да
isoWeekYear Да

Условные выражения

Команда Поддерживается
cond Да
ifNull Да
switch Да

Оператор типа данных

Команда Поддерживается
type Да

Выражения аккумулятора

Команда Поддерживается
sum Да
avg Да
first Да
last Да
max Да
min Да
push Да
addToSet Да
stdDevPop Да
stdDevSamp Да

Оператор объединения

Команда Поддерживается
mergeObjects Да

Типы данных

Azure Cosmos DB для MongoDB поддерживает документы, закодированные в формате BSON MongoDB. Версии 4.0 и более поздних версий (4.0+) повышают внутреннее использование этого формата для повышения производительности и снижения затрат. Документы, написанные или обновленные через конечную точку с 4.0+ преимуществами этой оптимизации.

В сценарии обновления документы, которые были написаны до обновления до версии 4.0+, не будут использовать улучшенную производительность до тех пор, пока они не будут обновлены с помощью операции записи через 4.0+ конечную точку.

Поддержка документов размером 16 МБ повышает ограничение размера документов с 2 до 16 МБ. Это ограничение применяется только к коллекциям, созданным после включения этой функции. Если эта функция включена для учетной записи базы данных, ее нельзя отключить.

Чтобы включить 16-МБ поддержку документов, измените параметр на вкладке "Компоненты" ресурса в портал Azure или программным способом добавьте EnableMongo16MBDocumentSupport ее.

Рекомендуется включить повторную попытку на стороне сервера и избежать использования диких индексов карта, чтобы обеспечить успешность запросов в больших документах. Создание единиц запросов к базе данных или сбору может также помочь в производительности.

Команда Поддерживается
Double Да
String Да
Object Да
Array Да
Binary Data Да
ObjectId Да
Boolean Да
Date Да
Null Да
32-bit Integer (int) Да
Timestamp Да
64-bit Integer (long) Да
MinKey Да
MaxKey Да
Decimal128 Да
Regular Expression Да
JavaScript Да
JavaScript (with scope) Да
Undefined Да

Индексы и свойства индекса

Azure Cosmos DB для MongoDB поддерживает следующие команды индекса и свойства индекса.

Индексы

Команда Поддерживается
Single Field Index Да
Compound Index Да
Multikey Index Да
Text Index Нет
2dsphere Да
2d Index Нет
Hashed Index No

Свойства индекса

Команда Поддерживается
TTL Да
Unique Да
Partial Поддерживается только для уникальных индексов
Case Insensitive No
Sparse Нет
Background Да

Операторы

Azure Cosmos DB для MongoDB поддерживает следующие операторы.

Логические операторы

Команда Поддерживается
or Да
and Да
not Да
nor Да

Операторы элементов

Команда Поддерживается
exists Да
type Да

Операторы запросов вычисления

Команда Поддерживается
expr Да
jsonSchema Нет
mod Да
regex Да
text Нет (не поддерживается. Используйте $regex вместо этого.)
where No

В $regex запросах выражения с привязкой слева разрешают поиск индексов. Однако использование i модификатора (без учета регистра) и m модификатора (multiline) приводит к сканированию коллекции во всех выражениях.

Если необходимо включить $ или |создать два (или более) $regex запроса.

Например, измените следующий исходный запрос:

find({x:{$regex: /^abc$/})

Для этого запроса:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

Первая часть измененного запроса использует индекс, чтобы ограничить поиск документами, начинающимися с ^abc. Вторая часть запроса соответствует точным записям. Оператор панели (|) выступает в качестве функции "или". Запрос find({x:{$regex: /^abc |^def/}) соответствует документам, в которых поле x имеет значения, начинающиеся с abc или def. Чтобы использовать индекс, рекомендуется разбить запрос на два разных запроса, присоединенных оператором$or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })

Операторы массива

Команда Поддерживается
all Да
elemMatch Да
size Да

Оператор комментариев

Команда Поддерживается
comment Да

Операторы проецирования

Команда Поддерживается
elemMatch Да
meta Нет
slice Да

Обновление операторов

Операторы обновления полей

Команда Поддерживается
inc Да
mul Да
rename Да
setOnInsert Да
set Да
unset Да
min Да
max Да
currentDate Да

Операторы обновления массивов

Команда Поддерживается
$ Да
$[] Да
$[\<identifier\>] Да
addToSet Да
pop Да
pullAll Да
pull Да
push Да
pushAll Да

Модификаторы обновления

Команда Поддерживается
each Да
slice Да
sort Да
position Да

Оператор побитового обновления

Команда Поддерживается
bit Да
bitsAllSet Нет
bitsAnySet Нет
bitsAllClear Нет
bitsAnyClear No

Геопространственные операторы

Оператор Поддерживается
$geoWithin Да
$geoIntersects Да
$near Да
$nearSphere Да
$geometry Да
$minDistance Да
$maxDistance Да
$center Нет
$centerSphere Нет
$box Нет
$polygon No

Сортирование операций

При использовании findOneAndUpdate операции поддерживаются операции сортировки в одном поле. Операции сортировки нескольких полей не поддерживаются.

Индексирование

API для MongoDB поддерживает различные индексы для включения сортировки по нескольким полям, повышения производительности запросов и обеспечения уникальности.

Шифрование на уровне клиента

Шифрование полей на уровне клиента — это функция драйвера, которая совместима с API для MongoDB. Явное шифрование, в котором драйвер явно шифрует каждое поле при записи, поддерживается. Автоматическое шифрование не поддерживается. Поддерживаются явная и автоматическая расшифровка.

Не mongocryptd следует запускаться, так как для выполнения каких-либо поддерживаемых операций не требуется.

GridFS

Azure Cosmos DB поддерживает GridFS через любой драйвер Mongo, совместимый с GridFS.

Репликация

Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Эта логика также расширена для достижения низкой задержки, глобального реплика tion. Azure Cosmos DB не поддерживает команды реплика tion вручную.

Повторные операции записи

Функция повторных операций записи позволяет драйверам MongoDB автоматически повторять определенные операции записи. Эта функция приводит к более строгим требованиям для определенных операций, которые соответствуют требованиям протокола MongoDB. Если эта функция включена, операции обновления, включая удаления, в сегментированных коллекциях требуют включения ключа сегмента в инструкцию фильтра запроса или обновления.

Например, с сегментированной коллекцией, сегментированной на "country" ключе, чтобы удалить все документы с полем "city" = "NYC", приложение должно выполнить операцию для всех значений ключа сегментов ("country" если включена функция повторной записи.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Успешно
  • db.coll.deleteMany({"city": "NYC"}) — сбой с ошибкой ShardKeyNotFound(61)

Примечание.

Повторные операции записи в настоящее время не поддерживают массовые неупорядоченные записи. Если вы хотите выполнить массовую запись с включенными повторными попытками записи, выполните массовую упорядоченную запись.

Чтобы включить эту функцию, добавьте возможность EnableMongoRetryableWrites в учетную запись базы данных. Эта функция также может быть включена на вкладке "Компоненты" в портал Azure.

Сегментирование

Azure Cosmos DB поддерживает автоматическое сегментирование на стороне сервера. Он автоматически управляет созданием сегментов, размещением и балансировкой. Azure Cosmos DB не поддерживает команды сегментирования вручную, что означает, что вам не нужно вызывать такие команды, как addShard, balancerStartи moveChunk. Необходимо указать ключ сегментов только при создании контейнеров или запросе данных.

Сеансы

Azure Cosmos DB пока не поддерживает команды сеансов на стороне сервера.

Срок жизни

Azure Cosmos DB поддерживает срок жизни (TTL), основанный на метках времени документа. Вы можете включить TTL для коллекции в портал Azure.

Настраиваемый срок жизни

Эта функция позволяет задать пользовательский срок жизни в любом поле в коллекции.

В коллекции с включенным TTL в поле:

  • Допустимые типы — это тип данных BSON и числовые типы (целочисленные, длинные или двойные), которые будут интерпретироваться как метка времени Unix для определения срока действия.

  • Если поле TTL является массивом, то для истечения срока действия документа считается наименьший элемент массива, который имеет допустимый тип.

  • Если поле TTL отсутствует в документе, срок действия документа не истекает.

  • Если поле TTL не является допустимым типом, срок действия документа не истекает.

Ограничения настраиваемого TTL

  • В коллекции может быть задано только одно поле TTL.

  • При использовании настраиваемого набора \_ts полей TTL поле не может использоваться для истечения срока действия документа.

  • Кроме того, вы не можете использовать \_ts поле.

Настройка

Вы можете включить пользовательский срок жизни, обновив EnableTtlOnCustomPath возможность для учетной записи. Узнайте , как настроить возможности.

Настройка TTL

Чтобы настроить TTL, выполните следующую команду: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})

Транзакции

Операции над несколькими документами поддерживаются в несегментированной коллекции. Транзакции с несколькими документами не поддерживаются в коллекциях или в сегментированных коллекциях. Время ожидания транзакций составляет 5 секунд.

Управление пользователями и ролями

Azure Cosmos DB пока не поддерживает пользователей и роли. Однако Azure Cosmos DB поддерживает управление доступом на основе ролей Azure (Azure RBAC), а также пароли и ключи только для чтения и чтения, которые можно получить с помощью портал Azure (на странице строк Подключение ion Strings).

Проблемы записи

Некоторые приложения полагаются на проблему записи, которая указывает количество ответов, необходимых во время операции записи. Из-за того, как Azure Cosmos DB обрабатывает реплика tion в фоновом режиме, все записи автоматически записываются по умолчанию. Любая проблема записи, указанная клиентским кодом, игнорируется. Узнайте, как использовать уровни согласованности для повышения доступности и производительности.

Следующие шаги