Azure Cosmos DB para MongoDB (versão de servidor 4.2): 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 sã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 usam internamente os delete() comandos e updateMany()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 para documentos de 16 MB eleva o limite de tamanho para os seus documentos de 2 MB para 16 MB. Esse limite se aplica somente a coleções criadas após a habilitação desse recurso. Quando esse recurso está habilitado para sua conta de banco de dados, ele não pode ser desativado.

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 e minúsculas) e do im 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