Azure Cosmos DB for MongoDB (versione server 4.2): funzionalità e sintassi supportate
SI APPLICA A: MongoDB
Azure Cosmos DB è il servizio di database di Microsoft multimodello distribuito a livello globale. Azure Cosmos DB offre più API di database. È possibile comunicare con Azure Cosmos DB for MongoDB usando uno dei driver client MongoDB open source. L'API Azure Cosmos DB for MongoDB consente di usare driver client esistenti aderendo al protocollo di collegamento MongoDB.
Usando l'API di Azure Cosmos DB for MongoDB è possibile sfruttare i noti vantaggi di MongoDB con tutte le funzionalità aziendali offerte da Cosmos DB: distribuzione globale, partizionamento orizzontale automatico, garanzie di disponibilità e latenza, crittografia di dati inattivi, backup e molto altro.
Supporto del protocollo
Gli operatori supportati con eventuali limiti ed eccezioni sono elencati in questo articolo. I driver client che identificano questi protocolli dovrebbero essere in grado di collegarsi ad Azure Cosmos DB for MongoDB. Quando si creano account Azure Cosmos DB for MongoDB, la versione 3.6+ degli account ha un endpoint nel formato *.mongo.cosmos.azure.com
. La versione 3.2 degli account ha un endpoint nel formato *.documents.azure.com
.
Nota
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 l'API di Azure Cosmos DB for MongoDB.
Linguaggi di query supportati
Azure Cosmos DB for MongoDB offre il supporto completo dei costrutti del linguaggio di query MongoDB. Nelle seguenti sezioni è possibile trovare l'elenco dettagliato di operazioni, operatori, fasi, comandi e opzioni attualmente supportati.
Comandi del database
L'API di Azure Cosmos DB for MongoDB supporta i seguenti comandi di database.
Comandi per le operazioni di query e scrittura
Comando | Supportata |
---|---|
change streams |
Sì |
delete |
Sì |
eval |
No |
find |
Sì |
findAndModify |
Sì |
getLastError |
Sì |
getMore |
Sì |
getPrevError |
No |
insert |
Sì |
parallelCollectionScan |
No |
resetError |
No |
update |
Sì |
Comandi delle transazioni
Nota
Le transazioni con più documenti sono supportate solo all'interno di una singola raccolta non partizionata. Le transazioni multidocumento tra raccolte e tra partizioni non sono ancora supportate nell'API per MongoDB.
Comando | Supportata |
---|---|
abortTransaction |
Sì |
commitTransaction |
Sì |
Comandi di autenticazione
Comando | Supportata |
---|---|
authenticate |
Sì |
getnonce |
Sì |
logout |
Sì |
Comandi di amministrazione
Comando | Supportata |
---|---|
cloneCollectionAsCapped |
No |
collMod |
No |
connectionStatus |
No |
convertToCapped |
No |
copydb |
No |
create |
Sì |
createIndexes |
Sì |
currentOp |
Sì |
drop |
Sì |
dropDatabase |
Sì |
dropIndexes |
Sì |
filemd5 |
Sì |
killCursors |
Sì |
killOp |
No |
listCollections |
Sì |
listDatabases |
Sì |
listIndexes |
Sì |
reIndex |
Sì |
renameCollection |
No |
Comandi di diagnostica
Comando | Supportata |
---|---|
buildInfo |
Sì |
collStats |
Sì |
connPoolStats |
No |
connectionStatus |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Sì |
explain |
Sì |
features |
No |
hostInfo |
Sì |
listDatabases |
Sì |
listCommands |
No |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Sì |
Pipeline di aggregazione
Azure Cosmos DB for MongoDB supporta i seguenti comandi di aggregazione.
Comandi di aggregazione
Comando | Supportata |
---|---|
aggregate |
Sì |
count |
Sì |
distinct |
Sì |
mapReduce |
No |
Fasi di aggregazione
Comando | Supportata |
---|---|
addFields |
Sì |
bucket |
No |
bucketAuto |
No |
changeStream |
Sì |
collStats |
No |
count |
Sì |
currentOp |
No |
facet |
Sì |
geoNear |
Sì |
graphLookup |
No |
group |
Sì |
indexStats |
No |
limit |
Sì |
listLocalSessions |
No |
listSessions |
No |
lookup |
Parziale |
match |
Sì |
merge |
Sì |
out |
Sì |
planCacheStats |
Sì |
project |
Sì |
redact |
Sì |
regexFind |
Sì |
regexFindAll |
Sì |
regexMatch |
Sì |
replaceRoot |
Sì |
replaceWith |
Sì |
sample |
Sì |
set |
Sì |
skip |
Sì |
sort |
Sì |
sortByCount |
Sì |
unset |
Sì |
unwind |
Sì |
Nota
L'aggregazione $lookup
non supporta ancora la funzionalità di sottoquery non correlata introdotta nella versione server 3.6. Se si tenta di usare l'operatore $lookup
con i let
campi e pipeline
, viene visualizzato un messaggio di errore che indica che let
non è supportato viene visualizzato.
Espressioni booleane
Comando | Supportata |
---|---|
and |
Sì |
not |
Sì |
or |
Sì |
Espressioni di conversione
Comando | Supportata |
---|---|
convert |
Sì |
toBool |
Sì |
toDate |
Sì |
toDecimal |
Sì |
toDouble |
Sì |
toInt |
Sì |
toLong |
Sì |
toObjectId |
Sì |
toString |
Sì |
Espressioni Set
Comando | Supportata |
---|---|
setEquals |
Sì |
setIntersection |
Sì |
setUnion |
Sì |
setDifference |
Sì |
setIsSubset |
Sì |
anyElementTrue |
Sì |
allElementsTrue |
Sì |
Espressioni di confronto
Nota
L'API per MongoDB non supporta espressioni di confronto con un valore letterale di matrice nella query.
Comando | Supportata |
---|---|
cmp |
Sì |
eq |
Sì |
gt |
Sì |
gte |
Sì |
lt |
Sì |
lte |
Sì |
ne |
Sì |
in |
Sì |
nin |
Sì |
Espressioni aritmetiche
Comando | Supportata |
---|---|
abs |
Sì |
add |
Sì |
ceil |
Sì |
divide |
Sì |
exp |
Sì |
floor |
Sì |
ln |
Sì |
log |
Sì |
log10 |
Sì |
mod |
Sì |
multiply |
Sì |
pow |
Sì |
round |
Sì |
sqrt |
Sì |
subtract |
Sì |
trunc |
Sì |
Espressioni trigonometriche
Comando | Supportata |
---|---|
acos |
Sì |
acosh |
Sì |
asin |
Sì |
asinh |
Sì |
atan |
Sì |
atan2 |
Sì |
atanh |
Sì |
cos |
Sì |
cosh |
Sì |
degreesToRadians |
Sì |
radiansToDegrees |
Sì |
sin |
Sì |
sinh |
Sì |
tan |
Sì |
tanh |
Sì |
Espressioni stringa
Comando | Supportata |
---|---|
concat |
Sì |
indexOfBytes |
Sì |
indexOfCP |
Sì |
ltrim |
Sì |
rtrim |
Sì |
trim |
Sì |
split |
Sì |
strLenBytes |
Sì |
strLenCP |
Sì |
strcasecmp |
Sì |
substr |
Sì |
substrBytes |
Sì |
substrCP |
Sì |
toLower |
Sì |
toUpper |
Sì |
Operatore di ricerca testo
Comando | Supportata |
---|---|
meta |
No |
Espressioni di matrice
Comando | Supportata |
---|---|
arrayElemAt |
Sì |
arrayToObject |
Sì |
concatArrays |
Sì |
filter |
Sì |
indexOfArray |
Sì |
isArray |
Sì |
objectToArray |
Sì |
range |
Sì |
reverseArray |
Sì |
reduce |
Sì |
size |
Sì |
slice |
Sì |
zip |
Sì |
in |
Sì |
Operatori variabili
Comando | Supportata |
---|---|
map |
Sì |
let |
Sì |
Variabili di sistema
Comando | Supportata |
---|---|
$$CLUSTERTIME |
Sì |
$$CURRENT |
Sì |
$$DESCEND |
Sì |
$$KEEP |
Sì |
$$NOW |
Sì |
$$PRUNE |
Sì |
$$REMOVE |
Sì |
$$ROOT |
Sì |
Operatore letterale
Comando | Supportata |
---|---|
literal |
Sì |
Espressioni di data
Comando | Supportata |
---|---|
dayOfYear |
Sì |
dayOfMonth |
Sì |
dayOfWeek |
Sì |
year |
Sì |
month |
Sì |
week |
Sì |
hour |
Sì |
minute |
Sì |
second |
Sì |
millisecond |
Sì |
dateToString |
Sì |
isoDayOfWeek |
Sì |
isoWeek |
Sì |
dateFromParts |
Sì |
dateToParts |
Sì |
dateFromString |
Sì |
isoWeekYear |
Sì |
Espressioni condizionali
Comando | Supportata |
---|---|
cond |
Sì |
ifNull |
Sì |
switch |
Sì |
Operatore tipo di dati
Comando | Supportata |
---|---|
type |
Sì |
Espressioni accumulatore
Comando | Supportata |
---|---|
sum |
Sì |
avg |
Sì |
first |
Sì |
last |
Sì |
max |
Sì |
min |
Sì |
push |
Sì |
addToSet |
Sì |
stdDevPop |
Sì |
stdDevSamp |
Sì |
Operatore merge
Comando | Supportata |
---|---|
mergeObjects |
Sì |
Tipo di dati
Azure Cosmos DB for MongoDB supporta documenti codificati in formato BSON MongoDB. Le versioni 4.0 e successive (4.0+) migliorano 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 da questa ottimizzazione.
In uno scenario di aggiornamento, i documenti scritti prima dell'aggiornamento alla versione 4.0+ non trarranno vantaggio dalle prestazioni migliorate fino a quando non saranno aggiornati tramite un'operazione di scrittura usando l'endpoint 4.0+.
Il supporto per documenti da 16 MB aumenta il limite per i documenti da 2 MB a 16 MB. Questo limite si applica solo alle raccolte create dopo l'abilitazione di questa funzionalità. Dopo l'abilitazione di questa funzionalità per l'account del database, non sarà possibile disabilitarla.
Per abilitare il supporto dei documenti da 16 MB, modificare l'impostazione nella scheda Funzionalità con la risorsa nel portale di Azure o aggiungere la EnableMongo16MBDocumentSupport
funzionalità a livello di codice.
È 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. Anche la generazione di unità richiesta di database o raccolta può contribuire a migliorare le prestazioni.
Comando | Supportata |
---|---|
Double |
Sì |
String |
Sì |
Object |
Sì |
Array |
Sì |
Binary Data |
Sì |
ObjectId |
Sì |
Boolean |
Sì |
Date |
Sì |
Null |
Sì |
32-bit Integer (int) |
Sì |
Timestamp |
Sì |
64-bit Integer (long) |
Sì |
MinKey |
Sì |
MaxKey |
Sì |
Decimal128 |
Sì |
Regular Expression |
Sì |
JavaScript |
Sì |
JavaScript (with scope) |
Sì |
Undefined |
Sì |
Indici e proprietà degli indici
Azure Cosmos DB for MongoDB supporta i comandi di indice e le proprietà di indice seguenti.
Indici
Comando | Supportata |
---|---|
Single Field Index |
Sì |
Compound Index |
Sì |
Multikey Index |
Sì |
Text Index |
No |
2dsphere |
Sì |
2d Index |
No |
Hashed Index |
No |
Proprietà degli indici
Comando | Supportata |
---|---|
TTL |
Sì |
Unique |
Sì |
Partial |
Supportato solo per indici univoci |
Case Insensitive |
No |
Sparse |
No |
Background |
Sì |
Operatori
Azure Cosmos DB for MongoDB supporta gli operatori seguenti.
Operatori logici
Comando | Supportata |
---|---|
or |
Sì |
and |
Sì |
not |
Sì |
nor |
Sì |
Operatori elemento
Comando | Supportata |
---|---|
exists |
Sì |
type |
Sì |
Operatori di query di valutazione
Comando | Supportata |
---|---|
expr |
Sì |
jsonSchema |
No |
mod |
Sì |
regex |
Sì |
text |
No (non è supportato. Usare $regex piuttosto.) |
where |
No |
Nelle query $regex
, le espressioni ancorate a sinistra consentono la ricerca nell'indice. L'uso del modificatore i
(senza distinzione tra maiuscole e minuscole) e m
(su più righe) provoca l'analisi della raccolta in tutte le espressioni.
Quando è necessario includere $
o |
è consigliabile creare due o più query $regex
.
Ad esempio, modificare la query originale seguente:
find({x:{$regex: /^abc$/})
In questa query:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
La prima parte della query modificata usa l'indice per limitare la ricerca ai documenti che iniziano con ^abc
. La seconda parte della query corrisponde alle voci esatte. L'operatore bar (|
) funge da funzione "o". La query find({x:{$regex: /^abc |^def/})
corrisponde ai documenti in cui il campo x
ha valori che iniziano con abc
o def
. Per usare l'indice, è consigliabile suddividere la query in due query diverse unite dall'operatore $or
: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
.
Operatori matrice
Comando | Supportata |
---|---|
all |
Sì |
elemMatch |
Sì |
size |
Sì |
Operatore commento
Comando | Supportata |
---|---|
comment |
Sì |
Operatori proiezione
Comando | Supportata |
---|---|
elemMatch |
Sì |
meta |
No |
slice |
Sì |
Operatori di aggiornamento
Operatori di aggiornamento di campo
Comando | Supportata |
---|---|
inc |
Sì |
mul |
Sì |
rename |
Sì |
setOnInsert |
Sì |
set |
Sì |
unset |
Sì |
min |
Sì |
max |
Sì |
currentDate |
Sì |
Operatori di aggiornamento di matrice
Comando | Supportata |
---|---|
$ |
Sì |
$[] |
Sì |
$[\<identifier\>] |
Sì |
addToSet |
Sì |
pop |
Sì |
pullAll |
Sì |
pull |
Sì |
push |
Sì |
pushAll |
Sì |
Modificatori aggiornamento
Comando | Supportata |
---|---|
each |
Sì |
slice |
Sì |
sort |
Sì |
position |
Sì |
Operatore di aggiornamento bit per bit
Comando | Supportata |
---|---|
bit |
Sì |
bitsAllSet |
No |
bitsAnySet |
No |
bitsAllClear |
No |
bitsAnyClear |
No |
Operatori geospaziali
Operatore | Supportata |
---|---|
$geoWithin |
Sì |
$geoIntersects |
Sì |
$near |
Sì |
$nearSphere |
Sì |
$geometry |
Sì |
$minDistance |
Sì |
$maxDistance |
Sì |
$center |
No |
$centerSphere |
No |
$box |
No |
$polygon |
No |
Operazioni di ordinamento
Quando si usa l'operazione findOneAndUpdate
, sono supportate le operazioni di ordinamento su un singolo campo. Le operazioni di ordinamento su più campi non sono supportate.
Indicizzazione
L'API per MongoDB supporta vari indici per abilitare l'ordinamento in più campi, migliorare le prestazioni delle query e applicare l'univocità.
Crittografia a livello di campo lato client
La crittografia dei campi a livello di client è una funzionalità driver ed è compatibile con l'API per MongoDB. La crittografia esplicita, dove il driver crittografa in modo esplicito ogni campo quando viene scritto, è supportata. La crittografia automatica non è supportata. La decrittografia esplicita e la decrittografia automatica sono supportate.
mongocryptd
non deve essere eseguito perché non è necessario eseguire alcuna delle operazioni supportate.
GridFS
Azure Cosmos DB supporta GridFS tramite qualsiasi driver Mongo compatibile con GridFS.
Replica
Azure Cosmos DB supporta la replica automatica e nativa ai livelli più bassi. Questa logica viene estesa anche per ottenere una replica globale a bassa latenza. Azure Cosmos DB non supporta comandi di replica manuali.
Scritture ripetibili
La funzionalità di scrittura ripetibile consente ai driver MongoDB di riprovare automaticamente determinate operazioni di scrittura. La funzionalità comporta requisiti più rigorosi per determinate operazioni che soddisfano i 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 nella chiave "country"
, per eliminare tutti i documenti con il campo "city" = "NYC"
, l'applicazione deve eseguire l'operazione per tutti i valori della chiave di partizione ("country"
) se la funzionalità di scrittura ripetibile è abilitata.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Successdb.coll.deleteMany({"city": "NYC"})
- Errori ShardKeyNotFound(61)
Nota
Le scritture ripetibili non supportano le scritture bulk non ordinate in questo 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.
Partizionamento orizzontale
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
, balancerStart
e moveChunk
. È necessario specificare la chiave di partizione solo quando si creano i contenitori o si eseguono query sui dati.
Sessioni
Azure Cosmos DB non supporta ancora i comandi delle sessioni sul lato server.
Durata (TTL)
Azure Cosmos DB supporta una durata (TTL) relativa in base al timestamp del documento. È possibile abilitare la durata (TTL) per una raccolta nel portale di Azure.
TTL personalizzato
Consente di impostare una durata (TTL) personalizzata in qualsiasi campo di una raccolta.
In una raccolta dove è abilitata la durata (TTL) in un campo:
I tipi accettabili sono il tipo di dati BSON e i tipi numerici (intero, lungo o doppio), che verranno interpretati come timestamp in millisecondi Unix per determinare la scadenza.
Se il campo TTL è una matrice, l'elemento più piccolo della matrice di un tipo accettabile viene considerato per la scadenza del documento.
Se il campo TTL non è presente in un documento, il documento non scade.
Se il campo TTL non è un tipo accettabile, il documento non scade.
Limitazioni di una durata (TTL) personalizzata
Un solo campo in una raccolta può avere una TTL impostata.
Con un set di campi TTL personalizzato, il campo
\_ts
non può essere usato per la scadenza del documento.Non è possibile usare anche il campo
\_ts
in aggiunta.
Impostazione
È possibile abilitare un TTL personalizzato aggiornando la funzionalità EnableTtlOnCustomPath
per l'account. Informazioni su come configurare le funzionalità.
Impostare la TTL
Per configurare la TTL, eseguire questo comando: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
Transazioni
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.
Gestire utenti e ruoli
Azure Cosmos DB non supporta ancora utenti e ruoli. Azure Cosmos DB, tuttavia, supporta il Controllo degli accessi in base al ruolo di Azure e chiavi e password di lettura/scrittura e sola lettura ottenibili tramite il portale di Azure (nella pagina Stringa di connessione).
Write concern
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.
Passaggi successivi
- Informazioni su come usare Studio 3T con Azure Cosmos DB for MongoDB.
- Informazioni su come usare Robo 3T con Azure Cosmos DB for MongoDB.
- Esplorare gli esempi di MongoDB con Azure Cosmos DB for MongoDB.
- Si sta tentando di pianificare la capacità per una migrazione ad Azure Cosmos DB? È possibile usare le informazioni del cluster di database esistente per la pianificazione della capacità.
- Se si ha disposizione solo il numero di vCores e del server nel cluster di database esistente, leggere le informazioni sulla stima delle unità richieste con vCore o vCPU.
- Se si conosce la frequenza delle richieste tipiche per il carico di lavoro corrente del database, leggere le informazioni sulla stima delle unità richieste utilizzando lo strumento di pianificazione della capacità di Azure Cosmos DB.