Funzionalità e sintassi supportate in Azure Cosmos DB per la versione del server MongoDB 4.0

Importante

Si vuole eseguire la migrazione di un'applicazione MongoDB esistente o usare le funzionalità MQL (MongoDB Query Language) ? Prendere in considerazione Azure DocumentDB.

Si sta cercando una soluzione di database per scenari su larga scala con un contratto di servizio di disponibilità 99.999%, scalabilità automatica immediata e failover automatico in più aree? Prendere in considerazione Azure Cosmos DB per NoSQL.

Azure Cosmos DB per MongoDB 4.0 consente di usare funzionalità di MongoDB familiari con funzionalità di livello aziendale, ad esempio distribuzione globale, partizionamento orizzontale automatico e disponibilità elevata. Questo articolo descrive le funzionalità, la sintassi e i vantaggi supportati dell'uso di Azure Cosmos DB per MongoDB 4.0.

Supporto protocollo

Gli operatori supportati e le eventuali limitazioni o eccezioni sono elencati qui. I driver client che identificano questi protocolli dovrebbero essere in grado di collegarsi ad Azure Cosmos DB for MongoDB. Quando si usa Azure Cosmos DB per gli account MongoDB, per la versione 3.6+ degli account il formato dell'endpoint è *.mongo.cosmos.azure.com mentre per la versione 3.2 degli account il formato dell'endpoint è *.documents.azure.com.

Annotazioni

Questo articolo elenca solo i comandi server supportati e non le funzioni wrapper lato client. Le funzioni wrapper lato client come deleteMany() e updateMany() utilizzano internamente i comandi server delete() e update(). Le funzioni che utilizzano i comandi server supportati sono compatibili con Azure Cosmos DB for MongoDB.

Supporto per linguaggio di query

Azure Cosmos DB for MongoDB offre il supporto completo dei costrutti del linguaggio di query MongoDB. Qui è possibile trovare l'elenco dettagliato delle operazioni, degli operatori, delle fasi, dei comandi e delle opzioni attualmente supportate.

Comandi del database

Azure Cosmos DB for MongoDB supporta i comandi di database seguenti:

Comandi per le operazioni di query e scrittura

Supportato
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

Comandi delle transazioni

Supportato
abortTransaction Yes
commitTransaction Yes

Comandi di autenticazione

Supportato
authenticate Yes
getnonce Yes
logout Yes

Comandi di amministrazione

Supportato
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

Comandi di diagnostica

Supportato
buildInfo Yes
collStats Yes
connPoolStats ✖️ No
connectionStatus ✖️ No
dataSize ✖️ No
dbHash ✖️ No
dbStats Yes
explain Yes
features ✖️ No
hello Yes
hostInfo Yes
listDatabases Yes
listCommands ✖️ No
profiler ✖️ No
serverStatus ✖️ No
top ✖️ No
whatsmyuri Yes

Pipeline di aggregazione

Comandi di aggregazione

Supportato
aggregate Yes
count Yes
distinct Yes
mapReduce ✖️ No

Fasi di aggregazione

Supportato
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 ❓Parziale
match Yes
out Yes
project Yes
redact Yes
replaceRoot Yes
replaceWith ✖️ No
sample Yes
skip Yes
sort Yes
sortByCount Yes
unwind Yes

Annotazioni

$lookup non supporta ancora la funzionalità di sottoquery non correlata introdotta nella versione 3.6 del server. Viene visualizzato un errore con un messaggio contenente let is not supported se si tenta di usare l'operatore $lookup con i campi let e pipeline.

Espressioni booleane

Supportato
and Yes
not Yes
or Yes

Espressioni di conversione

Supportato
convert Yes
toBool Yes
toDate Yes
toDecimal Yes
toDouble Yes
toInt Yes
toLong Yes
toObjectId Yes
toString Yes

Espressioni Set

Supportato
setEquals Yes
setIntersection Yes
setUnion Yes
setDifference Yes
setIsSubset Yes
anyElementTrue Yes
allElementsTrue Yes

Espressioni di confronto

Annotazioni

L'API per MongoDB non supporta le espressioni di confronto con un valore letterale di matrice nella query.

Supportato
cmp Yes
eq Yes
gt Yes
gte Yes
lt Yes
lte Yes
ne Yes
in Yes
nin Yes

Espressioni aritmetiche

Supportato
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

Espressioni stringa

Supportato
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

Operatore di ricerca testo

Supportato
meta ✖️ No

Espressioni di matrice

Supportato
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

Operatori variabili

Supportato
map Yes
let Yes

Variabili di sistema

Supportato
$$CURRENT Yes
$$DESCEND Yes
$$KEEP Yes
$$PRUNE Yes
$$REMOVE Yes
$$ROOT Yes

Operatore letterale

Supportato
literal Yes

Espressioni di data

Supportato
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

Espressioni condizionali

Supportato
cond Yes
ifNull Yes
switch Yes

Operatore tipo di dati

Supportato
type Yes

Espressioni accumulatore

Supportato
sum Yes
avg Yes
first Yes
last Yes
max Yes
min Yes
push Yes
addToSet Yes
stdDevPop Yes
stdDevSamp Yes

Operatore di unione

Supportato
mergeObjects Yes

Tipi di dati

Azure Cosmos DB per MongoDB supporta documenti codificati in formato JSON binario MongoDB (BSON). La versione dell'API 4.0 migliora l'utilizzo interno di questo formato per migliorare le prestazioni e ridurre i costi. I documenti scritti o aggiornati tramite un endpoint che esegue 4.0+ traggono vantaggio dall’ottimizzazione.

In uno scenario di aggiornamento alla versione 4.0 o successiva, i documenti creati prima dell'aggiornamento non traggono immediatamente vantaggio dalle prestazioni migliorate. Per sfruttare i vantaggi dei miglioramenti, aggiornare questi documenti tramite un'operazione di scrittura usando l'endpoint 4.0.

Il supporto per i documenti da 16 MB aumenta il limite di dimensioni per i documenti da 2 MB a 16 MB. Questo limite si applica solo alle raccolte create dopo l'abilitazione della funzionalità. Dopo aver abilitato questa funzionalità per un account di database, non può essere disabilitata.

L'abilitazione di 16 MB può essere eseguita nella scheda funzionalità del portale di Azure o a livello di codice aggiungendo la EnableMongo16MBDocumentSupport funzionalità .

È consigliabile abilitare la ripetizione lato server ed evitare l'uso di indici con caratteri jolly per garantire che le richieste nei documenti più grandi abbiano esito positivo. Se necessario, aumentare le unità di richiesta del database o della raccolta può anche contribuire a migliorare le prestazioni.

Supportato
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

Indici e proprietà degli indici

Indexes

Supportato
Single Field Index Yes
Compound Index Yes
Multikey Index Yes
Text Index ✖️ No
2dsphere Yes
2d Index ✖️ No
Hashed Index ✖️ No

Proprietà degli indici

Supportato
TTL Yes
Unique Yes
Partial ✖️ No
Case Insensitive ✖️ No
Sparse ✖️ No
Background Yes

Operatori

Operatori logici

Supportato
or Yes
and Yes
not Yes
nor Yes

Operatori elemento

Supportato
exists Yes
type Yes

Operatori per la valutazione delle query

Supportato
expr Yes
jsonSchema ✖️ No
mod Yes
regex Yes
text ✖️ No
where ✖️ No

Nelle query $regex le espressioni ancorate a sinistra consentono la ricerca nell'indice. Tuttavia, l'uso del modificatore i (senza distinzione tra maiuscole e minuscole) e del modificatore m (multilinea) causa l'analisi della raccolta in tutte le espressioni.

Quando è necessario includere $ o |, è consigliabile creare due o più query regex. Ad esempio, data la query originale seguente: find({x:{$regex: /^abc$/}), deve essere modificata come segue:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

La prima parte usa l'indice per limitare la ricerca a tali documenti che iniziano con ^abc e la seconda parte corrisponde alle voci esatte. L'operatore barra | funge da funzione "or". La query find({x:{$regex: /^abc |^def/}) individua i documenti in cui il campo x ha un valore che inizia con "abc" o "def". Per utilizzare l'indice, suddividere la query in due query diverse unite dall'operatore $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Suggerimento

Il text comando non è supportato. Utilizzare invece $regex.

Operatori matrice

Supportato
all Yes
elemMatch Yes
size Yes

Operatore di commento

Supportato
comment Yes

operatori di proiezione

Supportato
elemMatch Yes
meta ✖️ No
slice Yes

Operatori di aggiornamento

Operatori di aggiornamento di campo

Supportato
inc Yes
mul Yes
rename Yes
setOnInsert Yes
set Yes
unset Yes
min Yes
max Yes
currentDate Yes

Operatori di aggiornamento di matrice

Supportato
$ Yes
$[] Yes
$[\<identifier\>] Yes
addToSet Yes
pop Yes
pullAll Yes
pull Yes
push Yes
pushAll Yes

Aggiorna modificatori

Supportato
each Yes
slice Yes
sort Yes
position Yes

Operatore di aggiornamento bit per bit

Supportato
bit Yes
bitsAllSet ✖️ No
bitsAnySet ✖️ No
bitsAllClear ✖️ No
bitsAnyClear ✖️ No

Operatori geospaziali

Supportato
$geoWithin Yes
$geoIntersects Yes
$near Yes
$nearSphere Yes
$geometry Yes
$minDistance Yes
$maxDistance Yes
$center ✖️ No
$centerSphere ✖️ No
$box ✖️ No
$polygon ✖️ No

Operazioni di ordinamento

Quando si usa l'operazione findOneAndUpdate con l’API per MongoDB versione 4.0, sono supportate le operazioni di ordinamento in un singolo campo, ma non quelle su più campi. Le operazioni di ordinamento su più campi erano una limitazione dei protocolli di collegamento precedenti.

Indicizzazione

L'API per MongoDB supporta vari indici per abilitare l'ordinamento in più campi, migliorare le prestazioni delle query e applicare l'univocità.

GridFS

Azure Cosmos DB supporta GridFS tramite qualsiasi driver Mongo compatibile con GridFS.

Duplicazione

Azure Cosmos DB supporta la replica automatica e nativa ai livelli più bassi. Questa logica viene estesa per ottenere anche una replica globale a bassa latenza. Azure Cosmos DB non supporta comandi di replica manuali.

Scritture riprovabili

Le scritture ripetibili consentono ai driver MongoDB di ripetere automaticamente determinate operazioni di scrittura in caso di errore, ma comportano requisiti più rigorosi per determinate operazioni, che corrispondono ai requisiti del protocollo MongoDB. Con questa funzionalità abilitata, le operazioni di aggiornamento, incluse le eliminazioni, nelle raccolte partizionate richiedono che la chiave di partizione sia inclusa nell'istruzione del filtro di query o aggiornamento.

Ad esempio, con una raccolta partizionata, partizionata nella chiave region: per eliminare tutti i documenti con il campo city = "NYC", l'applicazione deve eseguire l'operazione per tutti i valori di chiave di partizione (area) se sono abilitate operazioni di scrittura ritentabili.

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) - Ha esito positivo con il messaggio Success
  • db.coll.deleteMany({"city": "NYC"}) - Genera un errore ShardKeyNotFound(61)

Annotazioni

Le scritture riprovabili non supportano le operazioni in blocco non ordinate al momento. Se si desidera eseguire operazioni di scrittura in blocco con le scritture ripetibili abilitate, eseguire scritture ordinate in blocco.

Per abilitare la funzionalità, aggiungere la funzionalità EnableMongoRetryableWrites all'account di database. Questa funzionalità può essere abilitata anche nella scheda Funzionalità del portale di Azure.

Sharding

Azure Cosmos DB supporta il partizionamento orizzontale automatico lato server. Gestisce automaticamente la creazione, il posizionamento e il bilanciamento delle partizioni. Azure Cosmos DB non supporta i comandi di partizionamento orizzontale manuali, il che significa che non è necessario richiamare comandi come addShard, balancerStarte moveChunk. È sufficiente specificare la chiave di partizione durante la creazione dei contenitori o l'esecuzione di query sui dati.

Sessioni

Azure Cosmos DB non supporta ancora i comandi delle sessioni sul lato server.

Tempo di vita (TTL)

Azure Cosmos DB supporta un'intervallo di tempo (TTL) basato sul timestamp del documento. La TTL può essere abilitata per le raccolte dal portale di Azure.

Transactions

Le transazioni con più documenti sono supportate all'interno di una raccolta senza partizionamento. Le transazioni multidocumento non sono supportate tra raccolte o nelle raccolte con partizionamento. Il timeout per le transazioni è fisso, pari a 5 secondi.

Gestione utenti e ruoli

Azure Cosmos DB non supporta ancora utenti e ruoli. Tuttavia, Azure Cosmos DB supporta il controllo degli accessi basato sui ruoli di Azure e le password/chiavi di lettura-scrittura e di sola lettura, ottenibili tramite il portale di Azure (pagina della stringa di connessione).

Livello di Durabilità della Scrittura

Alcune applicazioni usano un write concern che definisce il numero di risposte necessarie durante un'operazione di scrittura. A causa della modalità in cui Azure Cosmos DB gestisce la replica in background, per impostazione predefinita le operazioni di scrittura sono automaticamente Quorum. Qualsiasi write concern specificato dal codice client viene ignorato. Per altre informazioni, vedere Uso dei livelli di coerenza per ottimizzare la disponibilità e le prestazioni.