Azure Cosmos DB for MongoDB (versão 3.2): recursos e sintaxe compatíveis

APLICA-SE AO: MongoDB

O Azure Cosmos DB é o serviço de banco de dados multimodelo distribuído globalmente da Microsoft. Você pode se comunicar com o Azure Cosmos DB for MongoDB usando um dos drivers cliente do MongoDB de código aberto. O Azure Cosmos DB for MongoDB permite o uso de drivers cliente existentes por adotar ao protocolo de transmissão do MongoDB.

Usando o Azure Cosmos DB for MongoDB, você pode aproveitar os benefícios do MongoDB com os quais está acostumado, com todas as funcionalidades empresariais que o Azure Cosmos DB oferece: distribuição global, fragmentação automática, garantias de disponibilidade e latência, indexação automática de cada campo, criptografia em repouso, backups e muito mais.

Observação

A versão 3.2 do Azure Cosmos DB for MongoDB não tem planos atuais para EOL (fim da vida útil). O aviso mínimo para um futuro EOL é de três anos.

Suporte de protocolo

Todas as novas contas do Azure Cosmos DB for MongoDB são compatíveis com o servidor MongoDB versão 3.6. Este artigo aborda o MongoDB versão 3.2. Os operadores com suporte e qualquer limitação ou exceções estão listadas abaixo. Qualquer driver cliente que seja compatível com esses protocolos poderá se conectar ao Azure Cosmos DB for MongoDB.

O Azure Cosmos DB for MongoDB também oferece uma experiência de atualização direta para contas qualificadas. Saiba mais sobre o guia de atualização de versão MongoDB.

Suporte de linguagem de consulta

O Azure Cosmos DB for MongoDB oferece um suporte abrangente para constructos de linguagem de consulta do MongoDB. Abaixo, você encontrará uma lista detalhada de operações, operadores, estágios, comandos e opções atualmente compatíveis.

Comandos de banco de dados

O Azure Cosmos DB for MongoDB é compatível com os seguintes comandos de banco de dados:

Observação

Este artigo lista apenas os comandos de servidor com suporte e exclui as funções de wrapper do lado do cliente. Funções de wrapper do lado do cliente, como deleteMany() e updateMany(), utilizam internamente os comandos de servidor delete() e update(). As funções que utilizam comandos de servidor com suporte são compatíveis com o Azure Cosmos DB for MongoDB.

Comandos de operação de consulta e gravação

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

Comandos de autenticação

  • logout
  • authenticate
  • getnonce

Comandos de administração

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

Comandos de diagnóstico

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

Pipeline de agregação

Comandos de agregação

  • aggregate
  • count
  • distinct

Estágios de agregação

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

Expressões de agregação

Expressões boolianas

  • $and
  • $or
  • $not

Expressões de definição

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

Expressões de comparação

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

Expressões aritméticas

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Expressões de cadeia de caracteres

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Expressões de matriz

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

Expressões de data

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

Expressões condicionais

  • $cond
  • $ifNull

Acumuladores de agregação

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

Operadores

A seguir estão os operadores com suporte e seus exemplos correspondentes de uso. Considere este documento de exemplo usado nas consultas a seguir:

{
  "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"
}
Operador Exemplo
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"} }

Observações

Em consultas de $regex, as expressões ancoradas à esquerda permitem pesquisa de índice. No entanto, usar o modiciador 'i' (não sensível a maiúsculas e minúsculas) e o modificador 'm' (várias linhas) faz com que a coleção verifique todas as expressões. Quando houver a necessidade de se incluir "$" ou "|", é melhor criar duas (ou mais) consultas regex. Por exemplo, dada a seguinte consulta original: find({x:{$regex: /^abc$/}), ela deve ser modificada da seguinte maneira: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). A primeira parte usará o índice para restringir a pesquisa a esses documentos começando com ^abc e a segunda parte corresponderá às entradas exatas. O operador de barra '|' atua como uma função "or" – a consulta find({x:{$regex: /^abc|^def/}) faz a correspondência dos documentos em que o campo 'x' tem valores que começam com "abc" ou "def". Para utilizar o índice, é recomendável dividir a consulta em duas consultas diferentes unidas pelo operador $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Operadores de atualização

Operadores de atualização de campo

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

Operadores de atualização de matriz

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Observação: não há suporte para $pull com condição)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operador de atualização bit a bit

  • $bit

Operadores geoespaciais

Operador Exemplo Com suporte
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Sim
$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 ] ] ] } } } } Sim
$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 ] ] ] } } } } Sim
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Sim
$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 ] ] ] } } } } Sim
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Sim
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Sim
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Sim
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Sim
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Sim
$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 ] ] ] } } } } Sim

Classificar operações

Ao usar a operação findOneAndUpdate, há suporte para operações de classificação em apenas um campo, mas não há para operações em vários campos.

Outros operadores

Operador Exemplo Observações
$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 Sem suporte. Nesse caso, use $regex.

Operadores sem suporte

Os operadores $where e $eval não são compatíveis com o Azure Cosmos DB.

Métodos

Os seguintes métodos são suportados:

Métodos de cursor

Método Exemplo Observações
cursor.sort() cursor.sort({ "Elevation": -1 }) Documentos sem chave de classificação não são retornados

Índices exclusivos

O Azure Cosmos DB indexa cada campo em documentos que são gravados no banco de dados por padrão. Os índices exclusivos garantem que um campo específico não tenha valores duplicados em todos os documentos em uma coleção, de forma semelhante a como a exclusividade é preservada na chave _id padrão. Você pode criar índices personalizados no Azure Cosmos DB usando o comando createIndex, incluindo a restrição 'unique'.

Há índices exclusivos disponíveis para todas as contas do Azure Cosmos DB usando o Azure Cosmos DB for MongoDB.

Vida útil (TTL)

O Azure Cosmos DB dá suporte apenas a um TTL (vida útil) no nível da coleção (_ts) na versão 3.2. Atualize para as versões 3.6+ para aproveitar outras formas de TTL.

Gerenciamento de usuários e funções

O Azure Cosmos DB ainda não dá suporte para usuários e funções. No entanto, o Azure Cosmos DB dá suporte ao Azure RBAC (controle de acesso baseado em função do Azure) e as senhas/chaves de leitura/gravação e somente leitura que podem ser obtidas por meio do portal do Azure (página da cadeia de conexão).

Replicação

O Azure Cosmos DB oferece suporte à replicação automática nativa em camadas mais baixas. Essa lógica é estendida para atingir também réplica global e baixa. O Azure Cosmos DB não dá suporte a comandos de replicação manual.

Problema de Gravação

Alguns aplicativos dependem de uma Preocupação de gravação que especifica o número de respostas necessárias durante uma operação de gravação. Devido à forma como o Azure Cosmos DB lida com a replicação em segundo plano, todas as gravações são o quorum automaticamente, por padrão. Toda preocupação de gravação especificada pelo código do cliente é ignorada. Saiba mais em Como usar níveis de consistência para maximizar a disponibilidade e o desempenho.

Fragmentação

O Azure Cosmos DB oferece suporte à fragmentação automática, do lado do servidor. Ele gerencia a criação, o posicionamento e o balanceamento de fragmentos automaticamente. O Azure Cosmos DB não dá suporte a comandos de fragmentação manual, o que significa que você não precisa invocar comandos como shardCollection, addShard, balancerStart, moveChunk etc. Você só precisa especificar a chave de fragmento ao criar os contêineres ou consultar os dados.

Próximas etapas