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 поддерживает следующие команды базы данных:
$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 поддерживаются операции сортировки в одном поле и нескольких полях. Операции сортировки по нескольким полям были ограничениями предыдущих протоколов провода.
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)
Примечание.
Повторные операции записи в настоящее время не поддерживают массовые неупорядоченные записи. Если вы хотите выполнить массовую запись с включенными повторными попытками записи, выполните массовую упорядоченную запись.
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.