Azure Cosmos DB para MongoDB (versão de servidor 4.2): Recursos e sintaxe suportados
Artigo
APLICA-SE A: MongoDB
O Azure Cosmos DB é o serviço de banco de dados multimodelo distribuído globalmente pela Microsoft. O Azure Cosmos DB oferece várias APIs de banco de dados. Você pode se comunicar com o Azure Cosmos DB para MongoDB usando qualquer um dos drivers de cliente MongoDB de código aberto. O Azure Cosmos DB para MongoDB dá suporte ao uso de drivers de cliente existentes aderindo ao protocolo de fio MongoDB.
Ao usar o Azure Cosmos DB para MongoDB, você pode aproveitar os benefícios do MongoDB aos quais está acostumado, com todos os recursos corporativos que o Azure Cosmos DB oferece: distribuição global, fragmentação automática, garantias de disponibilidade e latência, criptografia em repouso, backups e muito mais.
Suporte de protocolo
Os operadores suportados e quaisquer limitações ou exceções estão listados neste artigo. Qualquer driver de cliente que compreenda esses protocolos deve ser capaz de se conectar ao Azure Cosmos DB para MongoDB. Quando você cria contas do Azure Cosmos DB para MongoDB, a versão 3.6+ de contas tem um ponto de extremidade no formato *.mongo.cosmos.azure.com. A versão 3.2 das contas tem um ponto de extremidade no formato *.documents.azure.com.
Nota
Este artigo lista apenas os comandos de servidor suportados e exclui funções de wrapper do lado do cliente. As funções de wrapper do lado do cliente, como deleteMany() e updateMany() usam internamente os delete() comandos e update() server. As funções que usam comandos de servidor com suporte são compatíveis com o Azure Cosmos DB para MongoDB.
Suporte à linguagem de consulta
O Azure Cosmos DB para MongoDB fornece suporte abrangente para construções de linguagem de consulta MongoDB. Nas seções a seguir, você pode encontrar a lista detalhada de operações, operadores, estágios, comandos e opções atualmente suportados.
Comandos da base de dados
O Azure Cosmos DB para MongoDB dá suporte aos seguintes comandos de banco de dados.
Comandos de operação de consulta e de escrita
Comando
Suportado
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 transação
Nota
As transações de vários documentos são suportadas apenas dentro de uma única coleção não fragmentada. As transações de vários documentos entre coleções e estilhaços cruzados ainda não são suportadas na API para o MongoDB.
Comando
Suportado
abortTransaction
Sim
commitTransaction
Sim
Comandos de autenticação
Comando
Suportado
authenticate
Sim
getnonce
Sim
logout
Sim
Comandos de administração
Comando
Suportado
cloneCollectionAsCapped
No
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
No
Comandos de diagnóstico
Comando
Suportado
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
O Azure Cosmos DB para MongoDB suporta os seguintes comandos de agregação.
Comandos de agregação
Comando
Suportado
aggregate
Sim
count
Sim
distinct
Sim
mapReduce
No
Fases de agregação
Comando
Suportado
addFields
Sim
bucket
No
bucketAuto
No
changeStream
Sim
collStats
No
count
Sim
currentOp
No
facet
Sim
geoNear
Sim
graphLookup
No
group
Sim
indexStats
No
limit
Sim
listLocalSessions
No
listSessions
Não
lookup
Parcial
match
Sim
merge
Sim
out
Sim
planCacheStats
Sim
project
Sim
redact
Sim
regexFind
Sim
regexFindAll
Sim
regexMatch
Sim
replaceRoot
Sim
replaceWith
Sim
sample
Sim
set
Sim
skip
Sim
sort
Sim
sortByCount
Sim
unset
Sim
unwind
Sim
Nota
A $lookup agregação ainda não suporta o recurso de subconsultas não correlacionadas introduzido na versão 3.6 do servidor. Se você tentar usar o $lookup operador com os campos andpipeline, uma mensagem de erro indicando que let não é suportadolet será exibida.
Expressões booleanas
Comando
Suportado
and
Sim
not
Sim
or
Sim
Expressões de conversão
Comando
Suportado
convert
Sim
toBool
Sim
toDate
Sim
toDecimal
Sim
toDouble
Sim
toInt
Sim
toLong
Sim
toObjectId
Sim
toString
Sim
Expressões de definição
Comando
Suportado
setEquals
Sim
setIntersection
Sim
setUnion
Sim
setDifference
Sim
setIsSubset
Sim
anyElementTrue
Sim
allElementsTrue
Sim
Expressões de comparação
Nota
A API para MongoDB não suporta expressões de comparação que tenham um literal de matriz na consulta.
Comando
Suportado
cmp
Sim
eq
Sim
gt
Sim
gte
Sim
lt
Sim
lte
Sim
ne
Sim
in
Sim
nin
Sim
Expressões aritméticas
Comando
Suportado
abs
Sim
add
Sim
ceil
Sim
divide
Sim
exp
Sim
floor
Sim
ln
Sim
log
Sim
log10
Sim
mod
Sim
multiply
Sim
pow
Sim
round
Sim
sqrt
Sim
subtract
Sim
trunc
Sim
Expressões de trigonometria
Comando
Suportado
acos
Sim
acosh
Sim
asin
Sim
asinh
Sim
atan
Sim
atan2
Sim
atanh
Sim
cos
Sim
cosh
Sim
degreesToRadians
Sim
radiansToDegrees
Sim
sin
Sim
sinh
Sim
tan
Sim
tanh
Sim
Expressões de cadeia
Comando
Suportado
concat
Sim
indexOfBytes
Sim
indexOfCP
Sim
ltrim
Sim
rtrim
Sim
trim
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
Suportado
meta
Não
Expressões de matriz
Comando
Suportado
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
Suportado
map
Sim
let
Sim
Variáveis do sistema
Comando
Suportado
$$CLUSTERTIME
Sim
$$CURRENT
Sim
$$DESCEND
Sim
$$KEEP
Sim
$$NOW
Sim
$$PRUNE
Sim
$$REMOVE
Sim
$$ROOT
Sim
Operador literal
Comando
Suportado
literal
Sim
Expressões de data
Comando
Suportado
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
Suportado
cond
Sim
ifNull
Sim
switch
Sim
Operador de tipo de dados
Comando
Suportado
type
Sim
Expressões do acumulador
Comando
Suportado
sum
Sim
avg
Sim
first
Sim
last
Sim
max
Sim
min
Sim
push
Sim
addToSet
Sim
stdDevPop
Sim
stdDevSamp
Sim
Operador de fusão
Comando
Suportado
mergeObjects
Sim
Tipos de dados
O Azure Cosmos DB para MongoDB dá suporte a documentos codificados no formato BSON do MongoDB. As versões 4.0 e posteriores (4.0+) melhoram o uso interno deste formato para melhorar o desempenho e reduzir custos. Os documentos que são escritos ou atualizados através de um ponto de extremidade executando 4.0+ se beneficiam dessa otimização.
Em um cenário de atualização, os documentos que foram gravados antes da atualização para a versão 4.0+ não se beneficiarão do desempenho aprimorado até que sejam atualizados por meio de uma operação de gravação por meio do ponto de extremidade 4.0+.
O suporte de documentos de 16 MB aumenta o limite de tamanho dos seus documentos de 2 MB para 16 MB. Este limite aplica-se apenas às coleções criadas após a ativação desta funcionalidade. Quando esta funcionalidade está ativada para a sua conta de base de dados, não pode ser desativada.
Para habilitar o suporte a documentos de 16 MB, altere a configuração na guia Recursos do recurso no portal do Azure ou adicione programaticamente o EnableMongo16MBDocumentSupport recurso.
Recomendamos que você habilite a Repetição do lado do servidor e evite o uso de índices curinga para garantir que as solicitações em documentos maiores sejam bem-sucedidas. Aumentar seu banco de dados ou unidades de solicitação de coleta também pode ajudar no desempenho.
Comando
Suportado
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
O Azure Cosmos DB para MongoDB dá suporte aos seguintes comandos de índice e propriedades de índice.
Índices
Comando
Suportado
Single Field Index
Sim
Compound Index
Sim
Multikey Index
Sim
Text Index
No
2dsphere
Sim
2d Index
No
Hashed Index
Não
Propriedades do índice
Comando
Suportado
TTL
Sim
Unique
Sim
Partial
Suportado apenas para índices exclusivos
Case Insensitive
No
Sparse
No
Background
Sim
Operadores
O Azure Cosmos DB para MongoDB suporta os seguintes operadores.
Operadores lógicos
Comando
Suportado
or
Sim
and
Sim
not
Sim
nor
Sim
Operadores de elementos
Comando
Suportado
exists
Sim
type
Sim
Operadores de consulta de avaliação
Comando
Suportado
expr
Sim
jsonSchema
No
mod
Sim
regex
Sim
text
Não (Não suportado. Use $regex em vez disso.)
where
Não
Nas $regex consultas, as expressões ancoradas à esquerda permitem a pesquisa de índice. No entanto, o uso do modificador (indiferenciação de maiúsculas i e minúsculas) e do m modificador (multilinha) faz com que a coleção seja verificada em todas as expressões.
Quando houver necessidade de incluir $ ou |, é melhor criar duas (ou mais) $regex consultas.
Por exemplo, altere a seguinte consulta original:
find({x:{$regex: /^abc$/})
Para esta consulta:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
A primeira parte da consulta modificada usa o índice para restringir a pesquisa a documentos que começam com ^abc. A segunda parte da consulta corresponde às entradas exatas. O operador de barra (|) atua como uma função "ou". A consulta find({x:{$regex: /^abc |^def/}) corresponde aos documentos em que o campo x tem valores que começam com abc ou def. Para usar o índice, recomendamos que você divida a consulta em duas consultas diferentes que são unidas $or pelo operador: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).
Operadores de array
Comando
Suportado
all
Sim
elemMatch
Sim
size
Sim
Operador de comentários
Comando
Suportado
comment
Sim
Operadores de projeção
Comando
Suportado
elemMatch
Sim
meta
No
slice
Sim
Operadores de atualização
Operadores de atualização de campo
Comando
Suportado
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
Suportado
$
Sim
$[]
Sim
$[\<identifier\>]
Sim
addToSet
Sim
pop
Sim
pullAll
Sim
pull
Sim
push
Sim
pushAll
Sim
Modificadores de atualização
Comando
Suportado
each
Sim
slice
Sim
sort
Sim
position
Sim
Operador de atualização bit a bit
Comando
Suportado
bit
Sim
bitsAllSet
No
bitsAnySet
No
bitsAllClear
No
bitsAnyClear
Não
Operadores geoespaciais
Operador
Suportado
$geoWithin
Sim
$geoIntersects
Sim
$near
Sim
$nearSphere
Sim
$geometry
Sim
$minDistance
Sim
$maxDistance
Sim
$center
No
$centerSphere
No
$box
No
$polygon
Não
Operações de classificação
Quando você usa a findOneAndUpdate operação, as operações de classificação em um único campo são suportadas. Não há suporte para operações de classificação em vários campos.
Indexação
A API para MongoDB suporta vários índices para permitir a classificação em vários campos, melhorar o desempenho da consulta e impor exclusividade.
Criptografia no nível de campo do lado do cliente
A criptografia de campo no nível do cliente é um recurso de driver e é compatível com a API do MongoDB. A criptografia explícita, na qual o driver criptografa explicitamente cada campo quando ele é gravado, é suportada. A encriptação automática não é suportada. A desencriptação explícita e a desencriptação automática são suportadas.
O mongocryptd não deve ser executado porque não é necessário para executar nenhuma das operações suportadas.
GridFS
O Azure Cosmos DB suporta GridFS através de qualquer controlador Mongo compatível com GridFS.
Replicação
O Azure Cosmos DB suporta a replicação nativa e automática nas camadas inferiores. Essa lógica também é estendida para alcançar replicação global de baixa latência. O Azure Cosmos DB não oferece suporte a comandos de replicação manual.
Gravações repetidas
O recurso de gravação reprovável permite que os drivers MongoDB tentem automaticamente certas operações de gravação. O recurso resulta em requisitos mais rigorosos para determinadas operações, que correspondem aos requisitos do protocolo MongoDB. Com esse recurso habilitado, as operações de atualização, incluindo exclusões, em coleções fragmentadas exigem que a chave de estilhaço seja incluída no filtro de consulta ou instrução de atualização.
Por exemplo, com uma coleção fragmentada que é fragmentada "country" na chave, para excluir todos os documentos que têm o campo "city" = "NYC", o aplicativo precisa executar a operação para todos os valores de chave de estilhaço ("country") se o recurso de gravação reprovável estiver habilitado.
db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Sucesso
db.coll.deleteMany({"city": "NYC"}) - Falha com erro ShardKeyNotFound(61)
Nota
As gravações retryable não suportam gravações não ordenadas em massa no momento. Se você quiser executar gravações em massa com gravações retryable habilitadas, execute gravações ordenadas em massa.
Para habilitar o recurso, adicione o recurso EnableMongoRetryableWrites à sua conta de banco de dados. Esse recurso também pode ser habilitado na guia Recursos no portal do Azure.
Fragmentação
O Azure Cosmos DB suporta a fragmentação automática do lado do servidor. Ele gerencia automaticamente a criação, o posicionamento e o balanceamento de estilhaços. O Azure Cosmos DB não oferece suporte a comandos de fragmentação manual, o que significa que você não precisa invocar comandos como addShard, balancerStarte moveChunk. Você precisa especificar a chave de fragmento somente quando criar os contêineres ou consultar os dados.
Sessões
O Azure Cosmos DB ainda não oferece suporte a comandos de sessões do lado do servidor.
Tempo de Viver
O Azure Cosmos DB dá suporte a um TTL (Time to Live) baseado no carimbo de data/hora do documento. Você pode habilitar o TTL para uma coleção no portal do Azure.
TTL personalizado
Esse recurso fornece a capacidade de definir um TTL personalizado em qualquer campo de uma coleção.
Em uma coleção que tenha TTL habilitado em um campo:
Os tipos aceitáveis são o tipo de dados BSON e os tipos numéricos (inteiro, longo ou duplo), que serão interpretados como um carimbo de tempo de milissegundos Unix para determinar a expiração.
Se o campo TTL for uma matriz, o menor elemento da matriz que é de um tipo aceitável é considerado para expiração do documento.
Se o campo TTL estiver ausente de um documento, o documento não expirará.
Se o campo TTL não for um tipo aceitável, o documento não expirará.
Limitações de um TTL personalizado
Apenas um campo em uma coleção pode ter um TTL definido nele.
Com um conjunto de campos TTL personalizado, o campo não pode ser usado para expiração do \_ts documento.
Você não pode usar o \_ts campo adicionalmente.
Configuração
Você pode habilitar um TTL personalizado atualizando o EnableTtlOnCustomPath recurso para a conta. Saiba como configurar recursos.
Configurar o TTL
Para configurar o TTL, execute este comando: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
Transações
As transações de vários documentos são suportadas dentro de uma coleção não fragmentada. Não há suporte para transações de vários documentos em coleções ou em coleções fragmentadas. O tempo limite para transações é de 5 segundos fixos.
Gerir utilizadores e funções
O Azure Cosmos DB ainda não oferece suporte a usuários e funções. No entanto, o Azure Cosmos DB dá suporte ao controle de acesso baseado em função do Azure (Azure RBAC) e senhas e chaves de leitura-gravação e somente leitura que podem ser obtidas por meio do portal do Azure (na página Cadeias de Conexão).
Escrever preocupações
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 automaticamente Quorum por padrão. Qualquer problema de gravação especificado pelo código do cliente é ignorado. Saiba como usar os níveis de consistência para maximizar a disponibilidade e o desempenho.
Próximos passos
Saiba como usar o Studio 3T com o Azure Cosmos DB para MongoDB.
Saiba como usar o Robo 3T com o Azure Cosmos DB para MongoDB.
Explore exemplos do MongoDB com o Azure Cosmos DB para MongoDB.
Tentando fazer o planejamento de capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre seu cluster de banco de dados existente para planejamento de capacidade.