Azure Cosmos DB для MongoDB (версия 3.6): поддерживаемые функции и синтаксис
Статья
Область применения: MongoDB
Azure Cosmos DB — это многомодельная служба базы данных от Microsoft, распространяемая по всему миру. Вы можете взаимодействовать с Azure Cosmos DB для MongoDB с помощью любого из клиентских драйверов MongoDB с открытым кодом. Azure Cosmos DB для MongoDB позволяет использовать существующие клиентские драйверы путем применения протокола подключения MongoDB.
Используя Azure Cosmos DB для MongoDB, вы можете воспользоваться преимуществами MongoDB, к которым вы используете, со всеми корпоративными возможностями, предоставляемыми Azure Cosmos DB: глобальное распределение, автоматическое сегментирование, гарантии доступности и задержки, шифрование неактивных данных, резервные копии и многое другое.
Примечание.
Версия 3.6 Azure Cosmos DB для MongoDB не имеет текущих планов для завершения работы (EOL). Мы сообщаем о будущем прекращении поддержки не менее чем за три года.
Поддержка протоколов
Azure Cosmos DB для MongoDB совместим с сервером MongoDB версии 3.6 по умолчанию для новых учетных записей. Ниже перечислены поддерживаемые операторы, а также ограничения и исключения. Любой драйвер клиента, который понимает эти протоколы, должен иметь возможность подключаться к Azure Cosmos DB для MongoDB. При создании API Azure Cosmos DB для учетных записей MongoDB версия 3.6 имеет конечную точку в формате *.mongo.cosmos.azure.com , а версия учетной записи 3.2 имеет конечную точку в формате *.documents.azure.com.
Поддержка языка запросов
Azure Cosmos DB для MongoDB обеспечивает комплексную поддержку конструкций языка запросов MongoDB. В следующих разделах приведен подробный список операций, операторов, этапов, команд и параметров сервера, которые в настоящее время поддерживаются Azure Cosmos DB.
Примечание.
В этой статье приведены только поддерживаемые серверные команды и не указаны функции-оболочки на стороне клиента. Функции-оболочки на стороне клиента, такие как deleteMany() и updateMany(), внутренне используют серверные команды delete() и update(). Функции, использующие поддерживаемые команды сервера, совместимы с Azure Cosmos DB для MongoDB.
Команды базы данных
Azure Cosmos DB для MongoDB поддерживает следующие команды базы данных:
$lookup пока не поддерживает функцию некоррелированных вложенных запросов, появившуюся в версии Server 3.6. При попытке использовать $lookup оператор с полями let и pipeline вы получите сообщение об ошибке, содержащее let is not supported.
Логические выражения
Команда
Поддерживается
and
Да
not
Да
or
Да
Выражения для наборов
Команда
Поддерживается
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
Да
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
Да
Типы данных
Команда
Поддерживается
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, а вторая часть будет проверять соответствие строк. Оператор панели | выступает в качестве функции "или" — запрос 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 операции операции сортировки в одном поле поддерживаются, но операции сортировки в нескольких полях не поддерживаются.
Azure Cosmos DB поддерживает GridFS через любой драйвер MongoDB, совместимый с GridFS.
Репликация
Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Этот механизм применяется и для организации глобальной репликации с низкой задержкой. Azure Cosmos DB не поддерживает команды репликации вручную.
Повторяемые операции записи
Azure Cosmos DB пока не поддерживает повторную запись. Клиентские драйверы должны добавить retryWrites=false их в строку подключения.
Сегментирование
Azure Cosmos DB поддерживает автоматическое сегментирование на стороне сервера. Он автоматически управляет созданием, размещением и балансировкой сегментов. Azure Cosmos DB не поддерживает команды сегментирования вручную, что означает, что вам не нужно вызывать такие команды, как addShard, balancerStart, moveChunk и т. д. Необходимо указать только ключ сегментов при создании контейнеров или запросе данных.
Сеансы
Azure Cosmos DB пока не поддерживает команды сеансов на стороне сервера.
Срок жизни (TTL)
Azure Cosmos DB поддерживает срок жизни (TTL), определяемый по метке времени для документа. Срок жизни можно включить для коллекций на портале Azure.
Управление пользователями и ролями
Azure Cosmos DB пока не поддерживает пользователей и роли. Тем не менее эта служба поддерживает управление доступом на основе ролей Azure (Azure RBAC), а также ключи и пароли для чтения и записи или только для чтения, которые можно получить с помощью панели строки подключения на портале Azure.
в MongoDB
Некоторые приложения используют опросы записи, указывающие число ответов, требуемых во время выполнения операции записи. Учитывая то, как Azure Cosmos DB обрабатывает репликацию, при использовании строгой согласованности все операции записи автоматически происходят в режиме кворума большинства по умолчанию. Любые проблемы с записью, определенные в клиентском коде, игнорируются. Дополнительные сведения см. в статье Использование уровней согласованности для повышения уровня доступности и производительности.