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 |
No |
find |
Да |
findAndModify |
Да |
getLastError |
Да |
getMore |
Да |
getPrevError |
No |
insert |
Да |
parallelCollectionScan |
No |
resetError |
No |
update |
Да |
Команды транзакций
Примечание.
Транзакции с несколькими документами поддерживаются только в одной не сегментированной коллекции. Транзакции с несколькими документами между коллекциями и между сегментами еще не поддерживаются в API для MongoDB.
Команда | Поддерживается |
---|---|
abortTransaction |
Да |
commitTransaction |
Да |
Команды для аутентификации
Команда | Поддерживается |
---|---|
authenticate |
Да |
getnonce |
Да |
logout |
Да |
Команды для администрирования
Команда | Поддерживается |
---|---|
cloneCollectionAsCapped |
No |
collMod |
No |
connectionStatus |
No |
convertToCapped |
No |
copydb |
No |
create |
Да |
createIndexes |
Да |
currentOp |
Да |
drop |
Да |
dropDatabase |
Да |
dropIndexes |
Да |
filemd5 |
Да |
killCursors |
Да |
killOp |
No |
listCollections |
Да |
listDatabases |
Да |
listIndexes |
Да |
reIndex |
Да |
renameCollection |
Нет |
Команды для диагностики
Команда | Поддерживается |
---|---|
buildInfo |
Да |
collStats |
Да |
connPoolStats |
No |
connectionStatus |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Да |
explain |
Да |
features |
No |
hostInfo |
Да |
listDatabases |
Да |
listCommands |
No |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Да |
Конвейер агрегирования
Azure Cosmos DB для MongoDB поддерживает следующие команды агрегирования.
Команды статистической обработки
Команда | Поддерживается |
---|---|
aggregate |
Да |
count |
Да |
distinct |
Да |
mapReduce |
Нет |
Этапы статистической обработки
Команда | Поддерживается |
---|---|
addFields |
Да |
bucket |
No |
bucketAuto |
No |
changeStream |
Да |
collStats |
No |
count |
Да |
currentOp |
No |
facet |
Да |
geoNear |
Да |
graphLookup |
No |
group |
Да |
indexStats |
No |
limit |
Да |
listLocalSessions |
No |
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 |
No |
2dsphere |
Да |
2d Index |
No |
Hashed Index |
No |
Свойства индекса
Команда | Поддерживается |
---|---|
TTL |
Да |
Unique |
Да |
Partial |
Поддерживается только для уникальных индексов |
Case Insensitive |
No |
Sparse |
No |
Background |
Да |
Операторы
Azure Cosmos DB для MongoDB поддерживает следующие операторы.
Логические операторы
Команда | Поддерживается |
---|---|
or |
Да |
and |
Да |
not |
Да |
nor |
Да |
Операторы элементов
Команда | Поддерживается |
---|---|
exists |
Да |
type |
Да |
Операторы запросов вычисления
Команда | Поддерживается |
---|---|
expr |
Да |
jsonSchema |
No |
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 |
No |
slice |
Да |
Обновление операторов
Операторы обновления полей
Команда | Поддерживается |
---|---|
inc |
Да |
mul |
Да |
rename |
Да |
setOnInsert |
Да |
set |
Да |
unset |
Да |
min |
Да |
max |
Да |
currentDate |
Да |
Операторы обновления массивов
Команда | Поддерживается |
---|---|
$ |
Да |
$[] |
Да |
$[\<identifier\>] |
Да |
addToSet |
Да |
pop |
Да |
pullAll |
Да |
pull |
Да |
push |
Да |
pushAll |
Да |
Модификаторы обновления
Команда | Поддерживается |
---|---|
each |
Да |
slice |
Да |
sort |
Да |
position |
Да |
Оператор побитового обновления
Команда | Поддерживается |
---|---|
bit |
Да |
bitsAllSet |
No |
bitsAnySet |
No |
bitsAllClear |
No |
bitsAnyClear |
No |
Геопространственные операторы
Оператор | Поддерживается |
---|---|
$geoWithin |
Да |
$geoIntersects |
Да |
$near |
Да |
$nearSphere |
Да |
$geometry |
Да |
$minDistance |
Да |
$maxDistance |
Да |
$center |
No |
$centerSphere |
No |
$box |
No |
$polygon |
No |
Сортирование операций
При использовании findOneAndUpdate
операции поддерживаются операции сортировки в одном поле. Операции сортировки нескольких полей не поддерживаются.
Индексирование
API для MongoDB поддерживает различные индексы для включения сортировки по нескольким полям, повышения производительности запросов и обеспечения уникальности.
Шифрование на уровне клиента
Шифрование полей на уровне клиента — это функция драйвера, которая совместима с API для MongoDB. Явное шифрование, в котором драйвер явно шифрует каждое поле при записи, поддерживается. Автоматическое шифрование не поддерживается. Поддерживаются явная и автоматическая расшифровка.
Не mongocryptd
следует запускаться, так как для выполнения каких-либо поддерживаемых операций не требуется.
GridFS
Azure Cosmos DB поддерживает GridFS через любой драйвер Mongo, совместимый с GridFS.
Репликация
Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Эта логика также расширена для достижения низкой задержки, глобальной репликации. Azure Cosmos DB не поддерживает команды репликации вручную.
Повторные операции записи
Функция повторных операций записи позволяет драйверам 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 (на странице "Строки подключения").
Проблемы записи
Некоторые приложения полагаются на проблему записи, которая указывает количество ответов, необходимых во время операции записи. Из-за того, как Azure Cosmos DB обрабатывает репликацию в фоновом режиме, все операции записи автоматически выполняются по умолчанию. Любая проблема записи, указанная клиентским кодом, игнорируется. Узнайте, как использовать уровни согласованности для повышения доступности и производительности.
Следующие шаги
- Узнайте, как использовать Studio 3T с Azure Cosmos DB для MongoDB.
- Узнайте, как использовать Robo 3T с Azure Cosmos DB для MongoDB.
- Изучите примеры MongoDB с помощью Azure Cosmos DB для MongoDB.
- Если вы планируете ресурсы для миграции в Azure Cosmos DB, Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса на основе числа виртуальных ядер или виртуальных ЦП.
- Если вы знаете типичные ставки запросов для текущей рабочей нагрузки базы данных, ознакомьтесь с оценкой единиц запросов с помощью планировщика емкости Azure Cosmos DB.