Поделиться через


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

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

Команда Поддерживается
change streams Да
delete Да
eval No
find Да
findAndModify Да
getLastError Да
getMore Да
getPrevError No
insert Да
parallelCollectionScan No
resetError No
update Да

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

Команда Поддерживается
authenticate Да
getnonce Да
logout Да

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

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

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

Команда Поддерживается
buildInfo Да
collStats Да
connPoolStats No
connectionStatus No
dataSize No
dbHash No
dbStats Да
explain Да
features No
hostInfo Да
listDatabases Да
listCommands No
profiler No
serverStatus No
top No
whatsmyuri Да

Конвейер статистической обработки

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

Команда Поддерживается
aggregate Да
count Да
distinct Да
mapReduce Нет

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

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

Примечание.

$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 операции операции сортировки в одном поле поддерживаются, но операции сортировки в нескольких полях не поддерживаются.

Индексирование

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.

в MongoDB

Некоторые приложения используют опросы записи, указывающие число ответов, требуемых во время выполнения операции записи. Учитывая то, как Azure Cosmos DB обрабатывает репликацию, при использовании строгой согласованности все операции записи автоматически происходят в режиме кворума большинства по умолчанию. Любые проблемы с записью, определенные в клиентском коде, игнорируются. Дополнительные сведения см. в статье Использование уровней согласованности для повышения уровня доступности и производительности.

Следующие шаги