Azure Cosmos DB for MongoDB (versão 4.2 do servidor): Recursos e sintaxe com suporte
APLICA-SE AO: MongoDB
O Azure Cosmos DB é o serviço de banco de dados de vários modelos 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 for MongoDB utilizando qualquer um dos drivers de código aberto do MongoDB. O Azure Cosmos DB for MongoDB tem suporte para o uso de drivers do cliente existentes, aderindo ao protocolo de transmissão do MongoDB.
Ao usar o Azure Cosmos DB for MongoDB, você pode aproveitar os benefícios do MongoDB com os quais já está acostumado, com todos os recursos empresariais 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 a protocolo
Os operadores compatíveis e quaisquer limitações ou exceções estão listados neste artigo. Qualquer driver cliente que seja compatível com esses protocolos poderá se conectar ao Azure Cosmos DB for MongoDB. Quando você cria contas do Azure Cosmos DB for MongoDB, a versão 3.6 ou superior das 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
.
Observação
Este artigo lista apenas os comandos de servidor suportados e exclui as funções de wrapper do lado do cliente. As funções de wrapper do lado do cliente, como deleteMany()
e updateMany()
, utilizam internamente os comandos do servidor delete()
e update()
. As funções que usam os comandos do servidor com suporte são compatíveis com o Azure Cosmos DB for MongoDB.
Suporte de linguagem de consulta
O Azure Cosmos DB for MongoDB oferece um suporte abrangente para constructos de linguagem de consulta do MongoDB. Nas seções a seguir, você encontrará a lista detalhada de operações, operadores, estágios, comandos e opções com suporte no momento.
Comandos de banco de dados
O Azure Cosmos DB for MongoDB tem suporte para 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 |
Não |
find |
Sim |
findAndModify |
Sim |
getLastError |
Sim |
getMore |
Sim |
getPrevError |
Não |
insert |
Sim |
parallelCollectionScan |
Não |
resetError |
No |
update |
Sim |
Comandos de transação
Observação
As transações com vários documentos são suportadas somente em uma única coleção não fragmentada. Ainda não há suporte para as transações de vários documentos entre coleções e entre fragmentos na API para MongoDB.
Comando | Com suporte |
---|---|
abortTransaction |
Sim |
commitTransaction |
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 |
Não |
listCollections |
Sim |
listDatabases |
Sim |
listIndexes |
Sim |
reIndex |
Sim |
renameCollection |
Não |
Comandos de diagnóstico
Comando | Com suporte |
---|---|
buildInfo |
Sim |
collStats |
Sim |
connPoolStats |
Não |
connectionStatus |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Sim |
explain |
Sim |
features |
Não |
hostInfo |
Sim |
listDatabases |
Sim |
listCommands |
Não |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Sim |
Pipeline de agregação
O Azure Cosmos DB for MongoDB tem suporte para os seguintes comandos 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 |
Não |
bucketAuto |
No |
changeStream |
Sim |
collStats |
Não |
count |
Sim |
currentOp |
Não |
facet |
Sim |
geoNear |
Sim |
graphLookup |
Não |
group |
Sim |
indexStats |
Não |
limit |
Sim |
listLocalSessions |
Não |
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 |
Observação
A agregação $lookup
ainda não tem suporte para o recurso de subconsultas não correlacionadas introduzido na versão 3.6 do servidor. Se você tentar usar o operador $lookup
com os campos let
e pipeline
, será exibida uma mensagem de erro indicando que let
não é suportado.
Expressões boolianas
Comando | Com suporte |
---|---|
and |
Sim |
not |
Sim |
or |
Sim |
Expressões de conversão
Comando | Com suporte |
---|---|
convert |
Sim |
toBool |
Sim |
toDate |
Sim |
toDecimal |
Sim |
toDouble |
Sim |
toInt |
Sim |
toLong |
Sim |
toObjectId |
Sim |
toString |
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 do MongoDB não tem suporte para expressões de comparação que tenham uma matriz literal 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 |
round |
Sim |
sqrt |
Sim |
subtract |
Sim |
trunc |
Sim |
Expressões trigonométricas
Comando | Com suporte |
---|---|
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 de caracteres
Comando | Com suporte |
---|---|
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 | 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 |
---|---|
$$CLUSTERTIME |
Sim |
$$CURRENT |
Sim |
$$DESCEND |
Sim |
$$KEEP |
Sim |
$$NOW |
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
O Azure Cosmos DB for MongoDB tem suporte para documentos que são codificados no formato BSON do MongoDB. As versões 4.0 e posteriores (4.0+) aprimoram o uso interno desse formato para melhorar o desempenho e reduzir os custos. Os documentos gravados ou atualizados por meio de um ponto de extremidade com a versão 4.0 ou superior se beneficiam dessa otimização.
Em um cenário de atualização, os documentos que foram escritos antes da atualização para a versão 4.0 ou superior 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 ou superior.
O suporte a documentos de 16 MB eleva o limite de tamanho dos documentos de 2 MB para 16 MB. Esse limite se aplica somente às coleções criadas após a habilitação desse recurso. Quando esse recurso está ativado para sua conta de banco de dados, ele não poderá ser desabilitado.
Para ativar o suporte a documentos de 16 MB, altere a configuração na guia Recursos para o 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 | 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
O Azure Cosmos DB for MongoDB tem suporte para os seguintes comandos de índice 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 |
Suportado apenas por índices exclusivos |
Case Insensitive |
No |
Sparse |
No |
Background |
Sim |
Operadores
O Azure Cosmos DB for MongoDB tem suporte para os seguintes 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 (Não suportado. Em vez disso, use $regex .) |
where |
No |
Em consultas $regex
, as expressões ancoradas à esquerda permitem a pesquisa de índice. No entanto, o uso do modificador i
(não diferencia maiúsculas de minúsculas) e do modificador m
(várias linhas) faz com que a coleção seja verificada em todas as expressões.
Quando houver a necessidade de incluir $
ou |
, é melhor criar duas (ou mais) consultas $regex
.
Por exemplo, altere a consulta original a seguir:
find({x:{$regex: /^abc$/})
Para essa consulta:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
A primeira parte da consulta modificada utiliza 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 nos quais 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 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
, as operações de classificação em um único campo são suportadas. As operações de classificação em vários campos não são suportadas.
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.
Criptografia no nível do campo do lado do cliente
A criptografia de campo de nível de cliente é um recurso do driver e é compatível com a API para MongoDB. Há suporte para a criptografia explícita, na qual o driver criptografa explicitamente cada campo quando ele é gravado. Não há suporte para a criptografia automática. Há suporte para descriptografia explícita e descriptografia automática.
O mongocryptd
não deve ser executado porque não é necessário para executar nenhuma das operações com suporte.
GridFS
O Azure Cosmos DB dá suporte a GridFS por meio de qualquer driver Mongo compatível com GridFS.
Replicação
O Azure Cosmos DB oferece suporte à replicação automática nativa em camadas mais baixas. Essa lógica também é estendida para obter replicação global e de baixa latência. O Azure Cosmos DB não dá suporte a comandos de replicação manual.
Gravações com nova tentativa
O recurso de gravações com nova tentativa permite que os drivers do MongoDB repitam automaticamente determinadas 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 fragmentação seja incluída no filtro de consulta ou na instrução de atualização.
Por exemplo, com uma coleção fragmentada que é fragmentada na chave "country"
, para excluir todos os documentos que têm o campo "city" = "NYC"
, o aplicativo precisa executar a operação para todos os valores da chave fragmentada ("country"
) se o recurso de gravações com nova tentativa estiver habilitado.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Êxitodb.coll.deleteMany({"city": "NYC"})
– Falha com o erro ShardKeyNotFound(61)
Observação
As gravações repetíveis não dão suporte a gravações não ordenadas em massa no momento. Se você quiser executar gravações em massa com a opção habilitar para gravações com nova tentativa, execute as gravações ordenadas em massa.
Para habilitar o recurso, adicione a funcionalidade EnableMongoRetryableWrites à sua conta do banco de dados. Esse recurso também pode ser habilitado na guia Recursos no portal do Azure.
Fragmentação
O Azure Cosmos DB oferece suporte à fragmentação automática, do lado do servidor. Ele gerencia automaticamente a criação, o posicionamento e o balanceamento de fragmentos. O Azure Cosmos DB não tem suporte para comandos de fragmentação manual, o que significa que você não precisa invocar comandos como addShard
, balancerStart
e moveChunk
. Você precisa especificar a chave do fragmento somente quando 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
O Azure Cosmos DB tem suporte para Tempo de Vida (TTL), que se baseia no carimbo de data/hora do documento. Você pode habilitar o TTL para uma coleção no portal do Azure.
TTL personalizado
Esse recurso permite definir um TTL personalizado em qualquer campo de uma coleção.
Em uma coleção que tem o 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 data/hora de milissegundos do Unix para determinar a expiração.
Se o campo TTL for uma matriz, o menor elemento da matriz que é de um tipo aceitável será considerado para expiração do documento.
Se o campo TTL estiver ausente em 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 uma TTL definida.
Com um campo TTL personalizado definido, o campo
\_ts
não pode ser utilizado para a expiração do documento.Não é possível usar o campo
\_ts
além disso.
Configuração
Você pode habilitar um TTL personalizado atualizando o recurso EnableTtlOnCustomPath
da conta. Saiba como configurar os recursos.
Configurar o TTL
Para configurar o TTL, execute este comando: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
Transactions
Há suporte para transações de vários documentos em uma coleção não fragmentada. Não há suporte para transações de vários documentos entre coleções ou em coleções fragmentadas. Há um tempo limite fixo de cinco segundos para as transações.
Gerenciar usuários e funções
O Azure Cosmos DB ainda não dá suporte para usuários e funções. Entretanto, o Azure Cosmos DB tem suporte para o controle de acesso baseado em função do Azure (Azure RBAC) e para senhas e chaves de leitura/gravação e somente leitura que podem ser obtidas por meio do portal do Microsoft Azure (na página Cadeias de Conexão).
Problemas de gravação
Alguns aplicativos dependem de um problema 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. Qualquer problema de gravação especificado pelo código do cliente será ignorado. Saiba como usar os níveis de consistência para maximizar a disponibilidade e o desempenho.
Próximas etapas
- Saiba como usar o Studio 3T com o Azure Cosmos DB for MongoDB.
- Saiba como usar o Robo 3T com o Azure Cosmos DB for MongoDB.
- Explore exemplos do MongoDB com o Azure Cosmos DB for MongoDB.
- Tentando fazer o planejamento da capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre o cluster de banco de dados existente para fazer isso.
- Se você conhece apenas o número de vCores e servidores do cluster de banco de dados existente, leia sobre como estimar unidades de solicitação com vCores ou vCPUs.
- Se você conhece as taxas de solicitação típicas da sua carga de trabalho de banco de dados atual, leia sobre como estimar as unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB.