Azure Cosmos DB для MongoDB (версия 3.2): поддерживаемые функции и синтаксис

ПРИМЕНИМО К: Mongodb

Azure Cosmos DB — это глобально распределенная многомодельная служба базы данных Майкрософт. Вы можете взаимодействовать с Azure Cosmos DB для MongoDB с помощью любого из клиентских драйверов MongoDB с открытым кодом. Azure Cosmos DB для MongoDB позволяет использовать существующие клиентские драйверы, придерживаясь протокола подключения MongoDB.

Используя Azure Cosmos DB для MongoDB, вы можете воспользоваться преимуществами MongoDB, к которым вы привыкли, со всеми корпоративными возможностями, которые предоставляет Azure Cosmos DB: глобальное распределение, автоматическое сегментирование, гарантии доступности и задержки, автоматическое индексирование каждого поля, шифрование неактивных данных, резервное копирование и многое другое.

Примечание

В версии 3.2 Azure Cosmos DB для MongoDB нет текущих планов на окончание срока службы (EOL). Мы сообщаем о будущем прекращении поддержки не менее чем за три года.

Поддержка протоколов

Все новые учетные записи Для Azure Cosmos DB для MongoDB совместимы с сервером MongoDB версии 3.6. В этой статье рассматривается MongoDB версии 3.2. Ниже перечислены поддерживаемые операторы, а также ограничения и исключения. Любой драйвер клиента, который понимает эти протоколы, должен иметь возможность подключения к Azure Cosmos DB для MongoDB.

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

Поддержка языка запросов

Azure Cosmos DB для MongoDB обеспечивает комплексную поддержку конструкций языка запросов MongoDB. Ниже приводится подробный список поддерживаемых операций, операторов, этапов, команд и параметров.

Команды базы данных

Azure Cosmos DB для MongoDB поддерживает следующие команды базы данных:

Примечание

В этой статье приведены только поддерживаемые серверные команды и не указаны функции-оболочки на стороне клиента. Функции-оболочки на стороне клиента, такие как deleteMany() и updateMany(), внутренне используют серверные команды delete() и update(). Функции, использующие поддерживаемые серверные команды, совместимы с Azure Cosmos DB для MongoDB.

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

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

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

  • logout
  • authenticate
  • getnonce

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

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

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

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

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

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

  • aggregate
  • count
  • distinct

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

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Статистические выражения

Логические выражения

  • $and
  • $or
  • $not

Выражения для наборов

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Выражения сравнения

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Арифметические выражения

  • $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

Выражения для массивов

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Выражения для дат

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Условные выражения

  • $cond
  • $ifNull

Операторы накопления статистической обработки

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

Операторы

Ниже представлен список поддерживаемых операторов с примерами их использования. Изучите пример документа, используемый в приведенных ниже запросах.

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
Оператор Пример
eq { "Volcano Name": { $eq: "Rainier" } }
gt { "Elevation": { $gt: 4000 } }
gte { "Elevation": { $gte: 4392 } }
lt { "Elevation": { $lt: 5000 } }
lte { "Elevation": { $lte: 5000 } }
ne { "Elevation": { $ne: 1 } }
in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not { "Elevation": { $not: { $gt: 5000 } } }
nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists { "Status": { $exists: true } }
type { "Status": { $type: "string" } }
mod { "Elevation": { $mod: [ 4, 0 ] } }
regex { "Volcano Name": { $regex: "^Rain"} }

Примечания

В запросах $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/}] }).

Обновление операторов

Операторы обновления полей

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Операторы обновления массивов

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Примечание. $pull с условием не поддерживается.
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Оператор побитового обновления

  • $bit

Геопространственные операторы

Оператор Пример Поддерживается
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Да
$geoIntersects { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } Да
$near { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } Да
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Да
$geometry { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } Да
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Да
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Да
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Да
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Да
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Да
$polygon { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } Да

Сортировать операции

При использовании операции сортировки findOneAndUpdate для одного поля поддерживаются, но операции сортировки по нескольким полям не поддерживаются.

Другие операторы

Оператор Пример Примечания
$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size { "Location.coordinates": { $size: 2 } }
$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text Не поддерживается. Вместо этого используйте $regex

Неподдерживаемые операторы

$where Операторы $eval и не поддерживаются Azure Cosmos DB.

Методы

Поддерживаются следующие методы:

Методы курсора

Метод Пример Примечания
cursor.sort() cursor.sort({ "Elevation": -1 }) Документы без ключа сортировки не возвращаются

Уникальные индексы

По умолчанию Azure Cosmos DB индексирует каждое поле в документах, сохраняемых в базе данных. Уникальные индексы гарантируют, что среди всех документов в коллекции не будет повторяющихся значений определенного поля, то есть для него сохраняется уникальность, как для ключа по умолчанию _id. Вы можете создать настраиваемые индексы в Azure Cosmos DB с помощью команды createIndex, включая ограничение unique.

Уникальные индексы доступны для всех учетных записей Azure Cosmos DB, использующих Azure Cosmos DB для MongoDB.

Срок жизни (TTL)

Azure Cosmos DB поддерживает только срок жизни (TTL) на уровне коллекции (_ts) в версии 3.2. Выполните обновление до версии 3.6 и более поздних версий, чтобы воспользоваться преимуществами других форм TTL.

Управление пользователями и ролями

Azure Cosmos DB пока не поддерживает пользователей и роли. Однако Azure Cosmos DB поддерживает управление доступом на основе ролей Azure (Azure RBAC), а также пароли и ключи только для чтения и чтения, которые можно получить с помощью портал Azure (страница "Строка подключения").

Репликация

Azure Cosmos DB поддерживает собственный механизм автоматической репликации на самых нижних уровнях. Этот механизм применяется и для организации глобальной репликации с низкой задержкой. Azure Cosmos DB не поддерживает команды репликации вручную.

Проблемы с записью

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

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

Azure Cosmos DB поддерживает автоматическое сегментирование на стороне сервера. Он автоматически управляет созданием, размещением и балансировкой сегментов. Azure Cosmos DB не поддерживает команды сегментирования вручную. Это означает, что вам не нужно вызывать такие команды, как shardCollection, addShard, balancerStart, moveChunk и т. д. Ключ сегмента необходимо указывать только при создании контейнеров или запросе данных.

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