Azure Cosmos DB para MongoDB (versão de servidor 5.0): Recursos e sintaxe suportados
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 é suportado let
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"})
- Sucessodb.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
, balancerStart
e 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.
- Se tudo o que você sabe é o número de vCores e servidores em seu cluster de banco de dados existente, leia sobre como estimar unidades de solicitação usando vCores ou vCPUs.
- Se você souber as taxas de solicitação típicas para sua carga de trabalho de banco de dados atual, leia sobre como estimar unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB.