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

APLICA-SE A: 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, criptografia em dados inativos, backups e muito mais.

Observação

A versão 3.6 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

Por padrão, o Azure Cosmos DB for MongoDB é compatível com o servidor do MongoDB na versão 3.6 em novas contas. 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. Quando você cria contas da API do Azure Cosmos DB for MongoDB, a versão 3.6 da conta tem o ponto de extremidade no formato *.mongo.cosmos.azure.com, enquanto a versão 3.2 da conta tem o ponto de extremidade no formato *.documents.azure.com.

Suporte de linguagem de consulta

O Azure Cosmos DB for MongoDB oferece um suporte abrangente para constructos de linguagem de consulta do MongoDB. As seções a seguir mostram a lista detalhada de operações de servidor, operadores, estágios, comandos e opções atualmente compatíveis com o Azure Cosmos DB.

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 banco de dados

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

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

Comando Com suporte
change streams Sim
delete Sim
eval No
find Sim
findAndModify Sim
getLastError Sim
getMore Sim
getPrevError No
insert Sim
parallelCollectionScan No
resetError No
update Sim

Comandos de autenticação

Comando Com suporte
authenticate Sim
getnonce Sim
logout Sim

Comandos de administração

Comando Com suporte
cloneCollectionAsCapped Não
collMod No
connectionStatus No
convertToCapped No
copydb No
create Sim
createIndexes Sim
currentOp Sim
drop Sim
dropDatabase Sim
dropIndexes Sim
filemd5 Sim
killCursors Sim
killOp No
listCollections Sim
listDatabases Sim
listIndexes Sim
reIndex Sim
renameCollection Não

Comandos de diagnóstico

Comando Com suporte
buildInfo Sim
collStats Sim
connPoolStats No
connectionStatus No
dataSize No
dbHash No
dbStats Sim
explain Sim
features No
hostInfo Sim
listDatabases Sim
listCommands No
profiler No
serverStatus No
top No
whatsmyuri Sim

Pipeline de agregação

Comandos de agregação

Comando Com suporte
aggregate Sim
count Sim
distinct Sim
mapReduce Não

Estágios de agregação

Comando Com suporte
addFields Sim
bucket No
bucketAuto No
changeStream Sim
collStats No
count Sim
currentOp No
facet Sim
geoNear Sim
graphLookup Sim
group Sim
indexStats No
limit Sim
listLocalSessions No
listSessions Não
lookup Parcial
match Sim
out Sim
project Sim
redact Sim
replaceRoot Sim
replaceWith No
sample Sim
skip Sim
sort Sim
sortByCount Sim
unwind Sim

Observação

O $lookup ainda não é compatível com um recurso de subconsultas não correlacionadas que foi introduzido na versão 3.6 do servidor. Você receberá uma mensagem de erro contendo let is not supported, caso tente usar o operador $lookup com os campos let e pipeline.

Expressões boolianas

Comando Com suporte
and Sim
not Sim
or Sim

Expressões de definição

Comando Com suporte
setEquals Sim
setIntersection Sim
setUnion Sim
setDifference Sim
setIsSubset Sim
anyElementTrue Sim
allElementsTrue Sim

Expressões de comparação

Observação

A API para MongoDB não dá suporte a expressões de comparação com um literal de matriz na consulta.

Comando Com suporte
cmp Sim
eq Sim
gt Sim
gte Sim
lt Sim
lte Sim
ne Sim
in Sim
nin Sim

Expressões aritméticas

Comando Com suporte
abs Sim
add Sim
ceil Sim
divide Sim
exp Sim
floor Sim
ln Sim
log Sim
log10 Sim
mod Sim
multiply Sim
pow Sim
sqrt Sim
subtract Sim
trunc Sim

Expressões de cadeia de caracteres

Comando Com suporte
concat Sim
indexOfBytes Sim
indexOfCP Sim
split Sim
strLenBytes Sim
strLenCP Sim
strcasecmp Sim
substr Sim
substrBytes Sim
substrCP Sim
toLower Sim
toUpper Sim

Operador de pesquisa de texto

Comando Com suporte
meta Não

Expressões de matriz

Comando Com suporte
arrayElemAt Sim
arrayToObject Sim
concatArrays Sim
filter Sim
indexOfArray Sim
isArray Sim
objectToArray Sim
range Sim
reverseArray Sim
reduce Sim
size Sim
slice Sim
zip Sim
in Sim

Operadores variáveis

Comando Com suporte
map Sim
let Sim

Variáveis do sistema

Comando Com suporte
$$CURRENT Sim
$$DESCEND Sim
$$KEEP Sim
$$PRUNE Sim
$$REMOVE Sim
$$ROOT Sim

Operador literal

Comando Com suporte
literal Sim

Expressões de data

Comando Com suporte
dayOfYear Sim
dayOfMonth Sim
dayOfWeek Sim
year Sim
month Sim
week Sim
hour Sim
minute Sim
second Sim
millisecond Sim
dateToString Sim
isoDayOfWeek Sim
isoWeek Sim
dateFromParts Sim
dateToParts Sim
dateFromString Sim
isoWeekYear Sim

Expressões condicionais

Comando Com suporte
cond Sim
ifNull Sim
switch Sim

Operador de tipo de dados

Comando Com suporte
type Sim

Expressões do acumulador

Comando Com suporte
sum Sim
avg Sim
first Sim
last Sim
max Sim
min Sim
push Sim
addToSet Sim
stdDevPop Sim
stdDevSamp Sim

Operador de mesclagem

Comando Com suporte
mergeObjects Sim

Tipos de dados

Comando Com suporte
Double Sim
String Sim
Object Sim
Array Sim
Binary Data Sim
ObjectId Sim
Boolean Sim
Date Sim
Null Sim
32-bit Integer (int) Sim
Timestamp Sim
64-bit Integer (long) Sim
MinKey Sim
MaxKey Sim
Decimal128 Sim
Regular Expression Sim
JavaScript Sim
JavaScript (with scope) Sim
Undefined Sim

Índices e propriedades de índice

Índices

Comando Com suporte
Single Field Index Sim
Compound Index Sim
Multikey Index Sim
Text Index Não
2dsphere Sim
2d Index Não
Hashed Index Não

Propriedades de índice

Comando Com suporte
TTL Sim
Unique Sim
Partial Não
Case Insensitive No
Sparse No
Background Sim

Operadores

Operadores lógicos

Comando Com suporte
or Sim
and Sim
not Sim
nor Sim

Operadores de elemento

Comando Com suporte
exists Sim
type Sim

Operadores de consulta de avaliação

Comando Com suporte
expr Sim
jsonSchema Não
mod Sim
regex Sim
text Não (sem suporte. Use $regex.)
where Não

Em consultas de $regex, as expressões ancoradas à esquerda permitem a 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, considerando 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 matriz

Comando Com suporte
all Sim
elemMatch Sim
size Sim

Operador de comentário

Comando Com suporte
comment Sim

Operadores de projeção

Comando Com suporte
elemMatch Sim
meta Não
slice Sim

Operadores de atualização

Operadores de atualização de campo

Comando Com suporte
inc Sim
mul Sim
rename Sim
setOnInsert Sim
set Sim
unset Sim
min Sim
max Sim
currentDate Sim

Operadores de atualização de matriz

Comando Com suporte
$ Sim
$[] Sim
$[\<identifier\>] Sim
addToSet Sim
pop Sim
pullAll Sim
pull Sim
push Sim
pushAll Sim

Atualizar modificadores

Comando Com suporte
each Sim
slice Sim
sort Sim
position Sim

Operador de atualização bit a bit

Comando Com suporte
bit Sim
bitsAllSet No
bitsAnySet Não
bitsAllClear Não
bitsAnyClear Não

Operadores geoespaciais

Operador Com suporte
$geoWithin Sim
$geoIntersects Sim
$near Sim
$nearSphere Sim
$geometry Sim
$minDistance Sim
$maxDistance Sim
$center Não
$centerSphere Não
$box Não
$polygon Não

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.

Indexação

A API para MongoDB é compatível com uma variedade de índices para habilitar a classificação em vários campos, aprimorar o desempenho da consulta e impor a exclusividade.

GridFS

O Azure Cosmos DB dá suporte a GridFS por meio de qualquer driver MongoDB compatível com GridFS.

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.

Gravações repetíveis

O Azure Cosmos DB ainda não dá suporte a gravações repetíveis. Os drivers de cliente precisam adicionar retryWrites=false à cadeia de conexão deles.

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 addShard, balancerStart, moveChunk etc. Você só precisa especificar a chave de fragmento ao criar os contêineres ou consultar os dados.

Sessões

O Azure Cosmos DB ainda não dá suporte a comandos de sessões do lado do servidor.

Vida útil (TTL)

O Azure Cosmos DB é compatível com uma TTL (vida útil) com base no carimbo de data/hora do documento. A TTL pode ser habilitada para coleções por meio do portal do Azure.

Gerenciamento de usuários e funções

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

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 ao modo como o Azure Cosmos DB lida com a replicação, todas as gravações são automaticamente de quorum de maioria por padrão ao usar a coerência forte. Toda preocupação de gravação especificada pelo código do cliente é ignorada. Para saber mais, confira o artigo Como usar níveis de consistência para maximizar a disponibilidade e o desempenho.

Próximas etapas