Azure Cosmos DB para MongoDB (versão do servidor 4.0): funcionalidades e sintaxe suportadas
Artigo
APLICA-SE A: MongoDB
O Azure Cosmos DB é um serviço de bases de dados com vários modelos e distribuído globalmente da Microsoft. Pode comunicar com o Azure Cosmos DB para MongoDB com qualquer um dos controladores de cliente do MongoDB open source. O Azure Cosmos DB para MongoDB permite a utilização de controladores de cliente existentes ao aderir ao protocolo de transferência do MongoDB.
Ao utilizar o Azure Cosmos DB para MongoDB, pode desfrutar das vantagens do MongoDB a que está habituado, com todas as capacidades empresariais fornecidas pelo Azure Cosmos DB: distribuição global, fragmentação automática, garantias de disponibilidade e latência, encriptação inativa, cópias de segurança e muito mais.
Suporte de Protocolo
Os operadores suportados e quaisquer limitações ou exceções são listadas abaixo. Qualquer controlador cliente que compreenda estes protocolos deve conseguir ligar-se ao Azure Cosmos DB para MongoDB. Quando cria o Azure Cosmos DB para contas do MongoDB, as versões de mais de 3,6 das contas têm o ponto final no formato *.mongo.cosmos.azure.com , enquanto a versão 3.2 das contas tem o ponto final no formato *.documents.azure.com.
Nota
Este artigo lista apenas os comandos de servidor suportados e exclui as funções de wrapper do lado do cliente. Funções de wrapper do lado do cliente, tais como deleteMany() e updateMany() utilizar internamente os comandos e update() do delete() servidor. As funções que utilizam comandos de servidor suportados são compatíveis com o Azure Cosmos DB para MongoDB.
Suporte de linguagem de consulta
O Azure Cosmos DB para MongoDB fornece suporte abrangente para construções de linguagem de consulta mongoDB. Abaixo, pode encontrar a lista detalhada de operações, operadores, fases, comandos e opções atualmente suportados.
Comandos da base de dados
O Azure Cosmos DB para MongoDB suporta os seguintes comandos de base de dados:
$lookup ainda não suporta a funcionalidade de subconsultas não correlacionadas introduzida na versão 3.6 do servidor. Receberá um erro com uma mensagem que let is not supported contém se tentar utilizar o $lookup operador com let e pipeline campos.
Expressões booleanas
Comando
Suportado
and
Yes
not
Yes
or
Yes
Expressões de conversão
Comando
Suportado
convert
Yes
toBool
Yes
toDate
Yes
toDecimal
Yes
toDouble
Yes
toInt
Yes
toLong
Yes
toObjectId
Yes
toString
Yes
Expressões de definição
Comando
Suportado
setEquals
Yes
setIntersection
Yes
setUnion
Yes
setDifference
Yes
setIsSubset
Yes
anyElementTrue
Yes
allElementsTrue
Yes
Expressões de comparação
Nota
A API para MongoDB não suporta expressões de comparação com um literal de matriz na consulta.
Comando
Suportado
cmp
Yes
eq
Yes
gt
Yes
gte
Yes
lt
Yes
lte
Yes
ne
Yes
in
Yes
nin
Yes
Expressões aritméticas
Comando
Suportado
abs
Yes
add
Yes
ceil
Yes
divide
Yes
exp
Yes
floor
Yes
ln
Yes
log
Yes
log10
Yes
mod
Yes
multiply
Yes
pow
Yes
sqrt
Yes
subtract
Yes
trunc
Yes
Expressões de cadeia
Comando
Suportado
concat
Yes
indexOfBytes
Yes
indexOfCP
Yes
ltrim
Yes
rtrim
Yes
trim
Yes
split
Yes
strLenBytes
Yes
strLenCP
Yes
strcasecmp
Yes
substr
Yes
substrBytes
Yes
substrCP
Yes
toLower
Yes
toUpper
Yes
Operador de pesquisa de texto
Comando
Suportado
meta
No
Expressões de matriz
Comando
Suportado
arrayElemAt
Yes
arrayToObject
Yes
concatArrays
Yes
filter
Yes
indexOfArray
Yes
isArray
Yes
objectToArray
Yes
range
Yes
reverseArray
Yes
reduce
Yes
size
Yes
slice
Yes
zip
Yes
in
Yes
Operadores variáveis
Comando
Suportado
map
Yes
let
Yes
Variáveis do sistema
Comando
Suportado
$$CURRENT
Yes
$$DESCEND
Yes
$$KEEP
Yes
$$PRUNE
Yes
$$REMOVE
Yes
$$ROOT
Yes
Operador literal
Comando
Suportado
literal
Yes
Expressões de data
Comando
Suportado
dayOfYear
Yes
dayOfMonth
Yes
dayOfWeek
Yes
year
Yes
month
Yes
week
Yes
hour
Yes
minute
Yes
second
Yes
millisecond
Yes
dateToString
Yes
isoDayOfWeek
Yes
isoWeek
Yes
dateFromParts
Yes
dateToParts
Yes
dateFromString
Yes
isoWeekYear
Yes
Expressões condicionais
Comando
Suportado
cond
Yes
ifNull
Yes
switch
Yes
Operador de tipo de dados
Comando
Suportado
type
Yes
Expressões acumuladoras
Comando
Suportado
sum
Yes
avg
Yes
first
Yes
last
Yes
max
Yes
min
Yes
push
Yes
addToSet
Yes
stdDevPop
Yes
stdDevSamp
Yes
Operador de intercalação
Comando
Suportado
mergeObjects
Yes
Tipos de dados
O Azure Cosmos DB para MongoDB suporta documentos codificados no formato BSON do MongoDB. A versão da API 4.0 melhora a utilização interna deste formato para melhorar o desempenho e reduzir os custos. Os documentos escritos ou atualizados através de um ponto final com mais de 4,0 beneficiam da otimização.
Num cenário de atualização, os documentos escritos antes da atualização para a versão 4.0+ não beneficiarão do desempenho melhorado até serem atualizados através de uma operação de escrita através do ponto final 4.0+ .
O suporte para documentos de 16 MB eleva o limite de tamanho para os seus documentos de 2 MB para 16 MB. Este limite aplica-se apenas às coleções criadas após a ativação desta funcionalidade. Depois de esta funcionalidade ser ativada na sua conta de base de dados, não pode ser desativada.
Recomendamos que ative a Repetição do Lado do Servidor e evite índices universais para garantir que os pedidos com documentos maiores são bem-sucedidos. Se necessário, aumentar as RUs de BD/Coleção também pode ajudar no desempenho.
Comando
Suportado
Double
Yes
String
Yes
Object
Yes
Array
Yes
Binary Data
Yes
ObjectId
Yes
Boolean
Yes
Date
Yes
Null
Yes
32-bit Integer (int)
Yes
Timestamp
Yes
64-bit Integer (long)
Yes
MinKey
Yes
MaxKey
Yes
Decimal128
Yes
Regular Expression
Yes
JavaScript
Yes
JavaScript (with scope)
Yes
Undefined
Yes
Índices e propriedades do índice
Índices
Comando
Suportado
Single Field Index
Yes
Compound Index
Yes
Multikey Index
Yes
Text Index
No
2dsphere
Yes
2d Index
No
Hashed Index
No
Propriedades do índice
Comando
Suportado
TTL
Yes
Unique
Yes
Partial
No
Case Insensitive
No
Sparse
No
Background
Yes
Operadores
Operadores lógicos
Comando
Suportado
or
Yes
and
Yes
not
Yes
nor
Yes
Operadores de elementos
Comando
Suportado
exists
Yes
type
Yes
Operadores de consulta de avaliação
Comando
Suportado
expr
Yes
jsonSchema
No
mod
Yes
regex
Yes
text
Não (Não suportado. Em vez disso, utilize $regex.)
where
No
Nas consultas $regex, as expressões ancoradas à esquerda permitem a pesquisa de índices. No entanto, utilizar o modificador "i" (não sensível a maiúsculas e minúsculas) e o modificador "m" (multinha) faz a análise de coleção em todas as expressões.
Quando é necessário incluir '$' ou '|', é melhor criar duas (ou mais) consultas regex. Por exemplo, dada a seguinte consulta original: find({x:{$regex: /^abc$/}), tem de ser modificada da seguinte forma:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
A primeira parte irá utilizar o índice para restringir a pesquisa aos documentos que começam por ^abc e a segunda parte vai fazer a correspondência com as entradas exatas. O operador barra "|" atua como uma função "or" – a consulta find({x:{$regex: /^abc |^def/}) faz a correspondência dos documentos cujo campo "x" tem valores que começam por "abc" ou "def". Para utilizar o índice, é recomendado dividir a consulta em duas consultas diferentes associadas pelo operador $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).
Operadores de matriz
Comando
Suportado
all
Yes
elemMatch
Yes
size
Yes
Operador de comentários
Comando
Suportado
comment
Yes
Operadores de projeção
Comando
Suportado
elemMatch
Yes
meta
No
slice
Yes
Operadores de atualização
Operadores de atualização de campo
Comando
Suportado
inc
Yes
mul
Yes
rename
Yes
setOnInsert
Yes
set
Yes
unset
Yes
min
Yes
max
Yes
currentDate
Yes
Operadores de atualização de matriz
Comando
Suportado
$
Yes
$[]
Yes
$[\<identifier\>]
Yes
addToSet
Yes
pop
Yes
pullAll
Yes
pull
Yes
push
Yes
pushAll
Yes
Modificadores de atualização
Comando
Suportado
each
Yes
slice
Yes
sort
Yes
position
Yes
Operador de atualização bit a bit
Comando
Suportado
bit
Yes
bitsAllSet
No
bitsAnySet
No
bitsAllClear
No
bitsAnyClear
No
Operadores geoespaciais
Operador
Suportado
$geoWithin
Yes
$geoIntersects
Yes
$near
Yes
$nearSphere
Yes
$geometry
Yes
$minDistance
Yes
$maxDistance
Yes
$center
No
$centerSphere
No
$box
No
$polygon
No
Operações de ordenação
Quando utiliza a operação com a findOneAndUpdate API para MongoDB versão 4.0, as operações de ordenação num único campo e vários campos são suportadas. As operações de ordenação em vários campos eram uma limitação dos protocolos de transmissão anteriores.
Indexação
A API para MongoDB suporta vários índices para permitir a ordenação em vários campos, melhorar o desempenho da consulta e impor exclusividade.
GridFS
O Azure Cosmos DB suporta o 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. Esta lógica é expandida para conseguir também a replicação global de latência baixa. O Azure Cosmos DB não suporta comandos de replicação manual.
Repetição de Escritas
As escritas retráveis permitem que os controladores do MongoDB repitam automaticamente determinadas operações de escrita se ocorrerem falhas, mas resulta em requisitos mais rigorosos para determinadas operações, que correspondem aos requisitos de protocolo do MongoDB. Com esta funcionalidade ativada, as operações de atualização, incluindo eliminações, em coleções fragmentadas exigirão que a chave de partição horizontal seja incluída no filtro de consulta ou na instrução de atualização.
Por exemplo, com uma coleção fragmentada, fragmentada na chave "país": para eliminar todos os documentos com a cidade = "NYC" do campo, a aplicação terá de executar a operação para todos os valores de chave de partição horizontal (país) se as escritas retráveis estiverem ativadas.
db.coll.deleteMany({"city": "NYC"}) - Falha com o erro ShardKeyNotFound(61)
Nota
De momento, as escritas retráveis não suportam escritas em massa não ordenadas. Se quiser efetuar escritas em massa com escritas retráveis ativadas, execute escritas ordenadas em massa.
Para ativar a funcionalidade, adicione a capacidade EnableMongoRetryableWrites à sua conta de base de dados. Esta funcionalidade também pode ser ativada no separador funcionalidades do portal do Azure.
Fragmentação
O Azure Cosmos DB suporta a fragmentação automática do lado do servidor. Gere a criação, colocação e balanceamento de partições horizontais automaticamente. O Azure Cosmos DB não suporta comandos de fragmentação manual, o que significa que não tem de invocar comandos como addShard, balancerStart, moveChunk, etc. Só tem de especificar a chave de partição horizontal ao criar os contentores ou consultar os dados.
Sessões
O Azure Cosmos DB ainda não suporta comandos de sessões do lado do servidor.
TTL
O Azure Cosmos DB suporta um TTL (time-to-live) baseado no carimbo de data/hora do documento. O TTL pode ser ativado para coleções a partir do portal do Azure.
Transações
As transações de vários documentos são suportadas numa coleção não processada. As transações de vários documentos não são suportadas em coleções ou em coleções fragmentadas. O tempo limite das transações é de 5 segundos fixo.
Gestão de funções e utilizadores
O Azure Cosmos DB ainda não suporta utilizadores e funções. No entanto, o Azure Cosmos DB suporta o controlo de acesso baseado em funções do Azure (RBAC do Azure) e palavras-passe/chaves só de leitura e leitura que podem ser obtidas através do portal do Azure (página Cadeia de Ligação).
Preocupação Escrita
Algumas aplicações dependem de uma Preocupação de Escrita, que especifica o número de respostas necessárias durante uma operação de escrita. Devido à forma como o Azure Cosmos DB processa a replicação em segundo plano, todas as escritas são automaticamente Quórum por predefinição. Qualquer preocupação de escrita especificada pelo código de cliente é ignorada. Saiba mais em Using consistency levels to maximize availability and performance (Utilizar níveis de consistência para maximizar a disponibilidade e desempenho).
Explore exemplos do MongoDB com o Azure Cosmos DB para MongoDB.
Está a tentar planear a capacidade de uma migração para o Azure Cosmos DB? Pode utilizar informações sobre o cluster de bases de dados existentes para o planeamento de capacidade.