Azure Cosmos DB for MongoDB (versão 3.6): recursos e sintaxe compatíveis
Artigo
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, 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:
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
Não
bitsAnySet
No
bitsAllClear
No
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
No
$box
No
$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.