Поделиться через


Поддерживаемые функции и синтаксис в Azure Cosmos DB для сервера MongoDB 5.0

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

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

В этой статье перечислены поддерживаемые операторы, а также ограничения и исключения. Любой драйвер клиента, который понимает эти протоколы, должен иметь возможность подключаться к 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 ✖️ Нет
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 ✖️ Нет
hello ✅ Да
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 ✖️ Нет
lookup ❓Частичный
match ✅ Да
merge ✅ Да
out ✅ Да
planCacheStats ✅ Да
project ✅ Да
redact ✅ Да
regexFind ✅ Да
regexFindAll ✅ Да
regexMatch ✅ Да
replaceRoot ✅ Да
replaceWith ✅ Да
sample ✅ Да
set ✅ Да
skip ✅ Да
sort ✅ Да
sortByCount ✅ Да
unset ✅ Да
unwind ✅ Да

Примечание.

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

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

Поддерживается
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 ✖️ Нет

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

Поддерживается
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 поддерживает документы, закодированные в двоичном формате JSON (BSON). Версии 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 ✖️ Нет

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

Поддерживается
TTL ✅ Да
Unique ✅ Да
Partial ❓Частичный
Case Insensitive ✖️ Нет
Sparse ✖️ Нет
Background ✅ Да

Подсказка

Partial поддерживается только для уникальных индексов.

Операторы

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

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

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

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

Поддерживается
exists ✅ Да
type ✅ Да

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

Поддерживается
expr ✅ Да
jsonSchema ✖️ Нет
mod ✅ Да
regex ✅ Да
text ✖️ Нет
where ✖️ Нет

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

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

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

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

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

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

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

Подсказка

Команда text не поддерживается. Вместо этого используйте $regex.

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

Поддерживается
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 ✖️ Нет

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

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

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

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

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

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

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

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

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

GridFS

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

Репликация

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

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

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

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

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) — выполняется успешно с сообщением Success
  • 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 в одном поле в коллекции. Срок действия документов зависит от значения этого поля.

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

  • Допустимые типы — это двоичный тип данных JSON (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 (на странице Строки подключения).

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

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