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 поддерживает следующие команды базы данных:

Команды для запросов и записи

Get-Help Поддерживается
change streams Да
delete Да
eval Нет
find Да
findAndModify Да
getLastError Да
getMore Да
getPrevError Нет
insert Да
parallelCollectionScan Нет
resetError Нет
update Да

Команды транзакций

Get-Help Поддерживается
abortTransaction Да
commitTransaction Да

Команды для аутентификации

Get-Help Поддерживается
authenticate Да
getnonce Да
logout Да

Команды для администрирования

Get-Help Поддерживается
cloneCollectionAsCapped Нет
collMod Нет
connectionStatus Нет
convertToCapped Нет
copydb Нет
create Да
createIndexes Да
currentOp Да
drop Да
dropDatabase Да
dropIndexes Да
filemd5 Да
killCursors Да
killOp Нет
listCollections Да
listDatabases Да
listIndexes Да
reIndex Да
renameCollection нет

Команды для диагностики

Get-Help Поддерживается
buildInfo Да
collStats Да
connPoolStats Нет
connectionStatus Нет
dataSize Нет
dbHash Нет
dbStats Да
explain Да
features Нет
hostInfo Да
listDatabases Да
listCommands Нет
profiler Нет
serverStatus Нет
top Нет
whatsmyuri Да

Конвейер агрегирования

Команды статистической обработки

Get-Help Поддерживается
aggregate Да
count Да
distinct Да
mapReduce нет

Этапы статистической обработки

Get-Help Поддерживается
addFields Да
bucket Нет
bucketAuto Нет
changeStream Да
collStats Нет
count Да
currentOp Нет
facet Да
geoNear Да
graphLookup Да
group Да
indexStats Нет
limit Да
listLocalSessions Нет
listSessions Нет
lookup Частично
match Да
out Да
project Да
redact Да
replaceRoot Да
replaceWith Нет
sample Да
skip Да
sort Да
sortByCount Да
unwind Да

Примечание

$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 МБ. Это ограничение применяется только к коллекциям, созданным после включения этой возможности. После включения этой возможности для учетной записи базы данных ее нельзя будет отключить.

Включить 16 МБ можно на вкладке функций в портал Azure или программным способом, добавив возможность EnableMongo16MBDocumentSupport.

Мы рекомендуем включить повторные попытки на стороне сервера и избегать индексов с подстановочными знаками, чтобы обеспечить успешное выполнение запросов с большими документами. При необходимости повышение производительности может также повысить производительность ЕЗ базы данных или коллекции.

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)

Примечание

Повторные операции записи в настоящее время не поддерживают массовые неупорядоченные операции записи. Если вы хотите выполнить массовую запись с включенной повторной записью, выполните массовую упорядоченную запись.

Чтобы включить эту функцию, добавьте возможность EnableMongoRetryableWrites в учетную запись базы данных. Эту функцию также можно включить на вкладке функции в портал Azure.

Сегментирование

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.

Дальнейшие действия