Azure Cosmos DB для MongoDB (версия сервера 4.0): поддерживаемые функции и синтаксис
Область применения: MongoDB
Azure Cosmos DB — это многомодельная служба базы данных от Microsoft, распространяемая по всему миру. Вы можете взаимодействовать с 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 |
Да |
Команды транзакций
Команда | Поддерживается |
---|---|
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 |
Да |
Конвейер агрегирования
Команды статистической обработки
Команда | Поддерживается |
---|---|
aggregate |
Да |
count |
Да |
distinct |
Да |
mapReduce |
Нет |
Этапы статистической обработки
Команда | Поддерживается |
---|---|
addFields |
Да |
bucket |
No |
bucketAuto |
No |
changeStream |
Да |
collStats |
No |
count |
Да |
currentOp |
No |
facet |
Да |
geoNear |
Да |
graphLookup |
Да |
group |
Да |
indexStats |
No |
limit |
Да |
listLocalSessions |
No |
listSessions |
No |
lookup |
Частично |
match |
Да |
out |
Да |
project |
Да |
redact |
Да |
replaceRoot |
Да |
replaceWith |
No |
sample |
Да |
skip |
Да |
sort |
Да |
sortByCount |
Да |
unwind |
Да |
Примечание.
$lookup
пока не поддерживает функцию некоррелированных вложенных запросов, появившуюся в версии Server 3.6. При попытке использовать $lookup
оператор с полями let
и pipeline
вы получите сообщение об ошибке, содержащее let is not supported
.
Логические выражения
Команда | Поддерживается |
---|---|
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 |
Да |
sqrt |
Да |
subtract |
Да |
trunc |
Да |
Строковые выражения
Команда | Поддерживается |
---|---|
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 |
Да |
Системные переменные
Команда | Поддерживается |
---|---|
$$CURRENT |
Да |
$$DESCEND |
Да |
$$KEEP |
Да |
$$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. Версия API 4.0 расширяет внутреннее использование этого формата для повышения производительности и снижения затрат. Документы, написанные или обновленные через конечную точку с 4.0+ преимуществом оптимизации.
В сценарии обновления документы, написанные до обновления до версии 4.0+, не будут использовать улучшенную производительность, пока они не будут обновлены с помощью операции записи через конечную точку 4.0+.
Поддержка документов размером 16 МБ повышает ограничение размера документов с 2 до 16 МБ. Это ограничение применяется только к коллекциям, созданным после включения этой возможности. После включения этой возможности для учетной записи базы данных ее нельзя будет отключить.
Включение 16 МБ можно сделать на вкладке функций в портал Azure или программно, добавив функцию EnableMongo16MBDocumentSupport.
Рекомендуется включить повторную попытку на стороне сервера и избежать подстановочных знаков, чтобы обеспечить успешное выполнение запросов с большими документами. При необходимости создание единиц RUS базы данных и коллекции может также помочь в производительности.
Команда | Поддерживается |
---|---|
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 |
Да |
Индексы и свойства индекса
Индексы
Команда | Поддерживается |
---|---|
Single Field Index |
Да |
Compound Index |
Да |
Multikey Index |
Да |
Text Index |
No |
2dsphere |
Да |
2d Index |
No |
Hashed Index |
No |
Свойства индекса
Команда | Поддерживается |
---|---|
TTL |
Да |
Unique |
Да |
Partial |
No |
Case Insensitive |
No |
Sparse |
No |
Background |
Да |
Операторы
Логические операторы
Команда | Поддерживается |
---|---|
or |
Да |
and |
Да |
not |
Да |
nor |
Да |
Операторы элементов
Команда | Поддерживается |
---|---|
exists |
Да |
type |
Да |
Операторы запросов вычисления
Команда | Поддерживается |
---|---|
expr |
Да |
jsonSchema |
No |
mod |
Да |
regex |
Да |
text |
Нет (не поддерживается — вместо этого используйте $regex.) |
where |
No |
В запросах $regex выражения, привязанные слева, поддерживают поиск по индексу. Но если добавить модификатор i (отключение учета регистра) и m (многостроковое выражение), коллекция будет проверяться во всех выражениях.
Если необходимо включить "$" или "|", рекомендуется создать два (или более) регулярных запроса. Например, исходный запрос вида 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/}, {$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 версии 4.0 поддерживаются операции сортировки в одном поле и нескольких полях. Операции сортировки по нескольким полям были ограничениями предыдущих протоколов провода.
Индексирование
API для MongoDB поддерживает различные индексы для включения сортировки по нескольким полям, повышения производительности запросов и обеспечения уникальности.
GridFS
Azure Cosmos DB поддерживает GridFS через любой драйвер Mongo, совместимый с GridFS.
Репликация
Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Этот механизм применяется и для организации глобальной репликации с низкой задержкой. Azure Cosmos DB не поддерживает команды репликации вручную.
Повторяемые операции записи
Повторные операции записи позволяют драйверам MongoDB автоматически повторять определенные операции записи, если произошел сбой, но приводит к более строгим требованиям для определенных операций, которые соответствуют требованиям протокола MongoDB. Если эта функция включена, для операций обновления, включая удаление, в сегментированных коллекциях потребуется включение ключа сегмента в фильтр запроса или инструкцию обновления.
Например, с сегментированной коллекцией, сегментированной по ключу "страна": чтобы удалить все документы с городом = "NYC"
полей, приложению потребуется выполнить операцию для всех значений ключа сегмента (страна), если включена повторная запись.
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 пока не поддерживает команды сеансов на стороне сервера.
Срок жизни (TTL)
Azure Cosmos DB поддерживает срок жизни (TTL), определяемый по метке времени для документа. Срок жизни можно включить для коллекций на портале Azure.
Транзакции
Операции над несколькими документами поддерживаются в несегментированной коллекции. Транзакции с несколькими документами не поддерживаются в коллекциях или в сегментированных коллекциях. Время ожидания транзакций составляет 5 секунд.
Управление пользователями и ролями
Azure Cosmos DB пока не поддерживает пользователей и роли. Однако Azure Cosmos DB поддерживает управление доступом на основе ролей Azure (Azure RBAC) и пароли и пароли только для чтения и чтения, которые можно получить с помощью портал Azure (страница "Строка подключения").
в MongoDB
Некоторые приложения используют опросы записи, указывающие число ответов, требуемых во время выполнения операции записи. Из-за того, как Azure Cosmos DB обрабатывает репликацию в фоновом режиме все операции записи автоматически по умолчанию. Любые проблемы с записью, определенные в клиентском коде, игнорируются. Дополнительные сведения см. в статье Настраиваемые уровни согласованности данных в DocumentDB.
Следующие шаги
- Узнайте, как использовать Studio 3T с Azure Cosmos DB для MongoDB.
- Узнайте, как использовать Robo 3T с Azure Cosmos DB для MongoDB.
- Изучите примеры MongoDB с помощью Azure Cosmos DB для MongoDB.
- Если вы планируете ресурсы для миграции в Azure Cosmos DB, Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, см. сведения об оценке единиц запросов на основе виртуальных ядер и серверов.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по