Azure Cosmos DB para MongoDB (versão 3.6): funcionalidades e sintaxe suportadas

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 transmissão do MongoDB.

Ao utilizar o Azure Cosmos DB para MongoDB, pode usufruir das vantagens do MongoDB a que está habituado, com todas as capacidades empresariais que o Azure Cosmos DB fornece: distribuição global, fragmentação automática, garantias de disponibilidade e latência, encriptação inativa, cópias de segurança e muito mais.

Nota

A versão 3.6 do Azure Cosmos DB para MongoDB não tem planos atuais para o fim de vida (EOL). O aviso mínimo para um futuro EOL é de três anos.

Suporte de Protocolo

Por predefinição, o Azure Cosmos DB para MongoDB é compatível com a versão 3.6 do servidor do MongoDB para novas contas. 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 a API do Azure Cosmos DB para contas mongoDB, a versão 3.6 da conta tem o ponto final no formato *.mongo.cosmos.azure.com , enquanto a versão 3.2 da conta tem o ponto final no formato *.documents.azure.com.

Suporte de linguagem de consulta

O Azure Cosmos DB para MongoDB fornece suporte abrangente para construções de linguagem de consulta do MongoDB. As secções seguintes mostram a lista detalhada de operações de servidor, operadores, fases, comandos e opções atualmente suportadas pelo Azure Cosmos DB.

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, como deleteMany() e updateMany() utilizam 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.

Comandos da base de dados

O Azure Cosmos DB para MongoDB suporta os seguintes comandos de base de dados:

Comandos de operação de consulta e de escrita

Comando Suportado
change streams Yes
delete Yes
eval No
find Yes
findAndModify Yes
getLastError Yes
getMore Yes
getPrevError No
insert Yes
parallelCollectionScan No
resetError No
update Yes

Comandos de autenticação

Comando Suportado
authenticate Yes
getnonce Yes
logout Yes

Comandos de administração

Comando Suportado
cloneCollectionAsCapped No
collMod No
connectionStatus No
convertToCapped No
copydb No
create Yes
createIndexes Yes
currentOp Yes
drop Yes
dropDatabase Yes
dropIndexes Yes
filemd5 Yes
killCursors Yes
killOp No
listCollections Yes
listDatabases Yes
listIndexes Yes
reIndex Yes
renameCollection No

Comandos de diagnóstico

Comando Suportado
buildInfo Yes
collStats Yes
connPoolStats No
connectionStatus No
dataSize No
dbHash No
dbStats Yes
explain Yes
features No
hostInfo Yes
listDatabases Yes
listCommands No
profiler No
serverStatus No
top No
whatsmyuri Yes

Pipeline de agregação

Comandos de agregação

Comando Suportado
aggregate Yes
count Yes
distinct Yes
mapReduce No

Fases de agregação

Comando Suportado
addFields Yes
bucket No
bucketAuto No
changeStream Yes
collStats No
count Yes
currentOp No
facet Yes
geoNear Yes
graphLookup Yes
group Yes
indexStats No
limit Yes
listLocalSessions No
listSessions No
lookup Parcial
match Yes
out Yes
project Yes
redact Yes
replaceRoot Yes
replaceWith No
sample Yes
skip Yes
sort Yes
sortByCount Yes
unwind Yes

Nota

$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 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
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 intercalar

Comando Suportado
mergeObjects Yes

Tipos de dados

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 de í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 | de barra age 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 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, as findOneAndUpdate operações de ordenação num único campo são suportadas, mas as operações de ordenação em vários campos não são suportadas.

Indexação

A API para MongoDB suporta vários índices para permitir a ordenação em vários campos, melhorar o desempenho das consultas e impor a exclusividade.

GridFS

O Azure Cosmos DB suporta GridFS através de qualquer controlador MongoDB 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

O Azure Cosmos DB ainda não suporta escritas retráveis. Os controladores de cliente têm de adicionar retryWrites=false à respetiva cadeia de ligação.

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ó precisa 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) com base no carimbo de data/hora do documento. O TTL pode ser ativado para coleções a partir do portal do Azure.

Gestão de funções e utilizadores

O Azure Cosmos DB ainda não suporta utilizadores e funções. No entanto, suporta o controlo de acesso baseado em funções do Azure (RBAC do Azure) e palavras-passe ou chaves só de leitura e leitura que podem ser obtidas através do painel de cadeia de ligação no portal do Azure.

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 lida com a replicação, todas as escritas são automaticamente quórum maioritário por predefinição ao utilizar consistência forte. Qualquer preocupação de escrita especificada pelo código de cliente é ignorada. Para saber mais, consulte o artigo Utilizar níveis de consistência para maximizar a disponibilidade e o desempenho .

Passos seguintes