Azure Cosmos DB для MongoDB (версия 3.6): поддерживаемые функции и синтаксис
Статья
ПРИМЕНИМО К: Mongodb
Azure Cosmos DB — это глобально распределенная многомодельная служба базы данных Майкрософт. Вы можете взаимодействовать с 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.
Логические выражения
Get-Help
Поддерживается
and
Да
not
Да
or
Да
Выражения для наборов
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
Да
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
Да
Типы данных
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, а вторая часть будет проверять соответствие строк. Оператор | bar действует как функция "или" — запрос 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 поддерживает различные индексы для обеспечения сортировки по нескольким полям, повышения производительности запросов и обеспечения уникальности.
GridFS
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.
Проблемы с записью
Некоторые приложения используют опросы записи, указывающие число ответов, требуемых во время выполнения операции записи. Учитывая то, как Azure Cosmos DB обрабатывает репликацию, при использовании строгой согласованности все операции записи автоматически происходят в режиме кворума большинства по умолчанию. Любые проблемы с записью, определенные в клиентском коде, игнорируются. Дополнительные сведения см. в статье Использование уровней согласованности для повышения уровня доступности и производительности.