Azure Cosmos DB для MongoDB (версия сервера 4.0): поддерживаемые функции и синтаксис
Статья
ПРИМЕНИМО К: Mongodb
Azure Cosmos DB — это глобально распределенная многомодельная служба базы данных Майкрософт. Вы можете взаимодействовать с 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.
Логические выражения
Get-Help
Поддерживается
and
Да
not
Да
or
Да
Выражения преобразования
Get-Help
Поддерживается
convert
Да
toBool
Да
toDate
Да
toDecimal
Да
toDouble
Да
toInt
Да
toLong
Да
toObjectId
Да
toString
Да
Выражения для наборов
Get-Help
Поддерживается
setEquals
Да
setIntersection
Да
setUnion
Да
setDifference
Да
setIsSubset
Да
anyElementTrue
Да
allElementsTrue
Да
Выражения сравнения
Примечание
API для MongoDB не поддерживает выражения сравнения с литералом массива в запросе.
Get-Help
Поддерживается
cmp
Да
eq
Да
gt
Да
gte
Да
lt
Да
lte
Да
ne
Да
in
Да
nin
Да
Арифметические выражения
Get-Help
Поддерживается
abs
Да
add
Да
ceil
Да
divide
Да
exp
Да
floor
Да
ln
Да
log
Да
log10
Да
mod
Да
multiply
Да
pow
Да
sqrt
Да
subtract
Да
trunc
Да
Строковые выражения
Get-Help
Поддерживается
concat
Да
indexOfBytes
Да
indexOfCP
Да
ltrim
Да
rtrim
Да
trim
Да
split
Да
strLenBytes
Да
strLenCP
Да
strcasecmp
Да
substr
Да
substrBytes
Да
substrCP
Да
toLower
Да
toUpper
Да
Оператор поиска в тексте
Get-Help
Поддерживается
meta
Нет
Выражения для массивов
Get-Help
Поддерживается
arrayElemAt
Да
arrayToObject
Да
concatArrays
Да
filter
Да
indexOfArray
Да
isArray
Да
objectToArray
Да
range
Да
reverseArray
Да
reduce
Да
size
Да
slice
Да
zip
Да
in
Да
Операторы переменных
Get-Help
Поддерживается
map
Да
let
Да
Системные переменные
Get-Help
Поддерживается
$$CURRENT
Да
$$DESCEND
Да
$$KEEP
Да
$$PRUNE
Да
$$REMOVE
Да
$$ROOT
Да
Литеральный оператор
Get-Help
Поддерживается
literal
Да
Выражения для дат
Get-Help
Поддерживается
dayOfYear
Да
dayOfMonth
Да
dayOfWeek
Да
year
Да
month
Да
week
Да
hour
Да
minute
Да
second
Да
millisecond
Да
dateToString
Да
isoDayOfWeek
Да
isoWeek
Да
dateFromParts
Да
dateToParts
Да
dateFromString
Да
isoWeekYear
Да
Условные выражения
Get-Help
Поддерживается
cond
Да
ifNull
Да
switch
Да
Оператор типа данных
Get-Help
Поддерживается
type
Да
Выражения аккумулятора
Get-Help
Поддерживается
sum
Да
avg
Да
first
Да
last
Да
max
Да
min
Да
push
Да
addToSet
Да
stdDevPop
Да
stdDevSamp
Да
Оператор объединения
Get-Help
Поддерживается
mergeObjects
Да
Типы данных
Azure Cosmos DB для MongoDB поддерживает документы, закодированные в формате BSON MongoDB. Версия API 4.0 расширяет внутреннее использование этого формата для повышения производительности и снижения затрат. Преимущества оптимизации для документов, написанных или обновленных через конечную точку с версией 4.0+.
В сценарии обновления документы, написанные до обновления до версии 4.0+, не выиграют от повышения производительности, пока они не будут обновлены с помощью операции записи через конечную точку 4.0+.
Поддержка документов размером 16 МБ повышает ограничение размера документов с 2 до 16 МБ. Это ограничение применяется только к коллекциям, созданным после включения этой возможности. После включения этой возможности для учетной записи базы данных ее нельзя будет отключить.
Мы рекомендуем включить повторные попытки на стороне сервера и избегать индексов с подстановочными знаками, чтобы обеспечить успешное выполнение запросов с большими документами. При необходимости повышение производительности может также повысить производительность ЕЗ базы данных или коллекции.
Get-Help
Поддерживается
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
Да
Индексы и свойства индекса
Индексы
Get-Help
Поддерживается
Single Field Index
Да
Compound Index
Да
Multikey Index
Да
Text Index
Нет
2dsphere
Да
2d Index
Нет
Hashed Index
Нет
Свойства индекса
Get-Help
Поддерживается
TTL
Да
Unique
Да
Partial
Нет
Case Insensitive
Нет
Sparse
Нет
Background
Да
Операторы
Логические операторы
Get-Help
Поддерживается
or
Да
and
Да
not
Да
nor
Да
Операторы элементов
Get-Help
Поддерживается
exists
Да
type
Да
Операторы запросов вычисления
Get-Help
Поддерживается
expr
Да
jsonSchema
Нет
mod
Да
regex
Да
text
Нет (не поддерживается — вместо этого используйте $regex.)
where
нет
В запросах $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/}] }).
Операторы массива
Get-Help
Поддерживается
all
Да
elemMatch
Да
size
Да
Оператор комментариев
Get-Help
Поддерживается
comment
Да
Операторы проецирования
Get-Help
Поддерживается
elemMatch
Да
meta
Нет
slice
Да
Обновление операторов
Операторы обновления полей
Get-Help
Поддерживается
inc
Да
mul
Да
rename
Да
setOnInsert
Да
set
Да
unset
Да
min
Да
max
Да
currentDate
Да
Операторы обновления массивов
Get-Help
Поддерживается
$
Да
$[]
Да
$[\<identifier\>]
Да
addToSet
Да
pop
Да
pullAll
Да
pull
Да
push
Да
pushAll
Да
Модификаторы обновления
Get-Help
Поддерживается
each
Да
slice
Да
sort
Да
position
Да
Оператор побитового обновления
Get-Help
Поддерживается
bit
Да
bitsAllSet
Нет
bitsAnySet
Нет
bitsAllClear
Нет
bitsAnyClear
нет
Геопространственные операторы
Оператор
Поддерживается
$geoWithin
Да
$geoIntersects
Да
$near
Да
$nearSphere
Да
$geometry
Да
$minDistance
Да
$maxDistance
Да
$center
Нет
$centerSphere
Нет
$box
Нет
$polygon
Нет
Сортирование операций
При использовании findOneAndUpdate операции с API для MongoDB версии 4.0 поддерживаются операции сортировки для одного и нескольких полей. Операции сортировки по нескольким полям были ограничениями предыдущих протоколов передачи данных.
Индексация
API для MongoDB поддерживает различные индексы для включения сортировки по нескольким полям, повышения производительности запросов и обеспечения уникальности.
GridFS
Azure Cosmos DB поддерживает GridFS через любой драйвер Mongo, совместимый с GridFS.
Репликация
Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Этот механизм применяется и для организации глобальной репликации с низкой задержкой. Azure Cosmos DB не поддерживает команды репликации вручную.
Повторяемые операции записи
Повторные операции записи позволяют драйверам MongoDB автоматически повторять определенные операции записи в случае сбоя, но приводит к более строгим требованиям к определенным операциям, которые соответствуют требованиям протокола MongoDB. Если эта функция включена, для операций обновления, включая удаление, в сегментированных коллекциях потребуется включение ключа сегмента в фильтр запроса или инструкцию обновления.
Например, с сегментированной коллекцией, сегментированной по ключу country: чтобы удалить все документы с помощью города = "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.
Transactions
Операции над несколькими документами поддерживаются в несегментированной коллекции. Транзакции с несколькими документами не поддерживаются в разных коллекциях или в сегментированных коллекциях. Время ожидания транзакций составляет 5 секунд.
Управление пользователями и ролями
Azure Cosmos DB пока не поддерживает пользователей и роли. Однако Azure Cosmos DB поддерживает управление доступом на основе ролей Azure (Azure RBAC), а также пароли и ключи для чтения и записи и только для чтения, которые можно получить с помощью портал Azure (страница Строка подключения).
Проблемы с записью
Некоторые приложения используют опросы записи, указывающие число ответов, требуемых во время выполнения операции записи. Из-за того, как Azure Cosmos DB обрабатывает репликацию в фоновом режиме, все операции записи по умолчанию автоматически являются кворумом. Любые проблемы с записью, определенные в клиентском коде, игнорируются. Дополнительные сведения см. в статье Настраиваемые уровни согласованности данных в DocumentDB.