Azure Cosmos DB per MongoDB (versione server 4.2): funzionalità e sintassi supportate
SI APPLICA A: Mongodb
Azure Cosmos DB è il servizio di database multimodello distribuito a livello globale microsoft. Azure Cosmos DB offre più API di database. È possibile comunicare con Azure Cosmos DB per MongoDB usando uno dei driver client MongoDB open source. Azure Cosmos DB per MongoDB supporta l'uso di driver client esistenti aderendo al protocollo di collegamento MongoDB.
Usando Azure Cosmos DB per MongoDB, è possibile sfruttare i vantaggi offerti da MongoDB, con tutte le funzionalità aziendali offerte da Azure Cosmos DB: distribuzione globale, partizionamento orizzontale automatico, disponibilità e latenza, crittografia dei dati inattivi, backup e molto altro ancora.
Supporto del protocollo
Gli operatori supportati con eventuali limiti ed eccezioni sono elencati in questo articolo. Qualsiasi driver client che riconosce questi protocolli deve essere in grado di connettersi ad Azure Cosmos DB per MongoDB. Quando si creano account Azure Cosmos DB per 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 del server supportati ed esclude le funzioni wrapper lato client. Le funzioni wrapper lato client, deleteMany()
ad esempio e updateMany()
internamente, usano i delete()
comandi server e update()
. Le funzioni che usano comandi server supportati sono compatibili con Azure Cosmos DB per MongoDB.
Linguaggi di query supportati
Azure Cosmos DB per MongoDB offre supporto completo per i costrutti del linguaggio di query MongoDB. Nelle sezioni seguenti è possibile trovare l'elenco dettagliato delle operazioni, degli operatori, delle fasi, dei comandi e delle opzioni attualmente supportate.
Comandi del database
Azure Cosmos DB per MongoDB supporta i comandi di database seguenti.
Comandi per le operazioni di query e scrittura
Comando | Supportato |
---|---|
change streams |
Sì |
delete |
Sì |
eval |
Numero |
find |
Sì |
findAndModify |
Sì |
getLastError |
Sì |
getMore |
Sì |
getPrevError |
Numero |
insert |
Sì |
parallelCollectionScan |
Numero |
resetError |
Numero |
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 più partizioni non sono ancora supportate nell'API per MongoDB.
Comando | Supportato |
---|---|
abortTransaction |
Sì |
commitTransaction |
Sì |
Comandi di autenticazione
Comando | Supportato |
---|---|
authenticate |
Sì |
getnonce |
Sì |
logout |
Sì |
Comandi di amministrazione
Comando | Supportato |
---|---|
cloneCollectionAsCapped |
No |
collMod |
Numero |
connectionStatus |
Numero |
convertToCapped |
Numero |
copydb |
Numero |
create |
Sì |
createIndexes |
Sì |
currentOp |
Sì |
drop |
Sì |
dropDatabase |
Sì |
dropIndexes |
Sì |
filemd5 |
Sì |
killCursors |
Sì |
killOp |
Numero |
listCollections |
Sì |
listDatabases |
Sì |
listIndexes |
Sì |
reIndex |
Sì |
renameCollection |
No |
Comandi di diagnostica
Comando | Supportato |
---|---|
buildInfo |
Sì |
collStats |
Sì |
connPoolStats |
Numero |
connectionStatus |
Numero |
dataSize |
Numero |
dbHash |
Numero |
dbStats |
Sì |
explain |
Sì |
features |
Numero |
hostInfo |
Sì |
listDatabases |
Sì |
listCommands |
Numero |
profiler |
Numero |
serverStatus |
Numero |
top |
Numero |
whatsmyuri |
Sì |
Pipeline di aggregazione
Azure Cosmos DB per MongoDB supporta i comandi di aggregazione seguenti.
Comandi di aggregazione
Comando | Supportato |
---|---|
aggregate |
Sì |
count |
Sì |
distinct |
Sì |
mapReduce |
No |
Fasi di aggregazione
Comando | Supportato |
---|---|
addFields |
Sì |
bucket |
Numero |
bucketAuto |
Numero |
changeStream |
Sì |
collStats |
Numero |
count |
Sì |
currentOp |
Numero |
facet |
Sì |
geoNear |
Sì |
graphLookup |
Numero |
group |
Sì |
indexStats |
Numero |
limit |
Sì |
listLocalSessions |
Numero |
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 con i let
campi e pipeline
, viene visualizzato un messaggio di errore che indica che let
non è supportato.$lookup
Espressioni booleane
Comando | Supportato |
---|---|
and |
Sì |
not |
Sì |
or |
Sì |
Espressioni di conversione
Comando | Supportato |
---|---|
convert |
Sì |
toBool |
Sì |
toDate |
Sì |
toDecimal |
Sì |
toDouble |
Sì |
toInt |
Sì |
toLong |
Sì |
toObjectId |
Sì |
toString |
Sì |
Espressioni Set
Comando | Supportato |
---|---|
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 | Supportato |
---|---|
cmp |
Sì |
eq |
Sì |
gt |
Sì |
gte |
Sì |
lt |
Sì |
lte |
Sì |
ne |
Sì |
in |
Sì |
nin |
Sì |
Espressioni aritmetiche
Comando | Supportato |
---|---|
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 trigonometria
Comando | Supportato |
---|---|
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 | Supportato |
---|---|
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 | Supportato |
---|---|
meta |
No |
Espressioni di matrice
Comando | Supportato |
---|---|
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 | Supportato |
---|---|
map |
Sì |
let |
Sì |
Variabili di sistema
Comando | Supportato |
---|---|
$$CLUSTERTIME |
Sì |
$$CURRENT |
Sì |
$$DESCEND |
Sì |
$$KEEP |
Sì |
$$NOW |
Sì |
$$PRUNE |
Sì |
$$REMOVE |
Sì |
$$ROOT |
Sì |
Operatore letterale
Comando | Supportato |
---|---|
literal |
Sì |
Espressioni di data
Comando | Supportato |
---|---|
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 | Supportato |
---|---|
cond |
Sì |
ifNull |
Sì |
switch |
Sì |
Operatore tipo di dati
Comando | Supportato |
---|---|
type |
Sì |
Espressioni accumulatore
Comando | Supportato |
---|---|
sum |
Sì |
avg |
Sì |
first |
Sì |
last |
Sì |
max |
Sì |
min |
Sì |
push |
Sì |
addToSet |
Sì |
stdDevPop |
Sì |
stdDevSamp |
Sì |
Operatore merge
Comando | Supportato |
---|---|
mergeObjects |
Sì |
Tipo di dati
Azure Cosmos DB per 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 vengono aggiornati tramite un'operazione di scrittura tramite 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à. Quando questa funzionalità è abilitata per l'account del database, non può essere disabilitata.
Per abilitare il supporto di documenti da 16 MB, modificare l'impostazione nella scheda Funzionalità per la risorsa nella 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 | Supportato |
---|---|
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 per MongoDB supporta i comandi di indice e le proprietà dell'indice seguenti.
Indici
Comando | Supportato |
---|---|
Single Field Index |
Sì |
Compound Index |
Sì |
Multikey Index |
Sì |
Text Index |
Numero |
2dsphere |
Sì |
2d Index |
Numero |
Hashed Index |
No |
Proprietà degli indici
Comando | Supportato |
---|---|
TTL |
Sì |
Unique |
Sì |
Partial |
Supportato solo per indici univoci |
Case Insensitive |
No |
Sparse |
Numero |
Background |
Sì |
Operatori
Azure Cosmos DB per MongoDB supporta gli operatori seguenti.
Operatori logici
Comando | Supportato |
---|---|
or |
Sì |
and |
Sì |
not |
Sì |
nor |
Sì |
Operatori elemento
Comando | Supportato |
---|---|
exists |
Sì |
type |
Sì |
Operatori di query di valutazione
Comando | Supportato |
---|---|
expr |
Sì |
jsonSchema |
Numero |
mod |
Sì |
regex |
Sì |
text |
No (non supportato. Usare $regex invece. |
where |
No |
Nelle $regex
query le espressioni ancorate a sinistra consentono la ricerca nell'indice. Tuttavia, l'uso del i
modificatore (senza distinzione tra maiuscole e minuscole) e il modificatore (multilinea) determina l'analisi m
della raccolta in tutte le espressioni.
Quando è necessario includere $
o |
, è consigliabile creare due o più $regex
query.
Ad esempio, modificare la query originale seguente:
find({x:{$regex: /^abc$/})
A 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 | Supportato |
---|---|
all |
Sì |
elemMatch |
Sì |
size |
Sì |
Operatore commento
Comando | Supportato |
---|---|
comment |
Sì |
Operatori proiezione
Comando | Supportato |
---|---|
elemMatch |
Sì |
meta |
Numero |
slice |
Sì |
Operatori di aggiornamento
Operatori di aggiornamento di campo
Comando | Supportato |
---|---|
inc |
Sì |
mul |
Sì |
rename |
Sì |
setOnInsert |
Sì |
set |
Sì |
unset |
Sì |
min |
Sì |
max |
Sì |
currentDate |
Sì |
Operatori di aggiornamento di matrice
Comando | Supportato |
---|---|
$ |
Sì |
$[] |
Sì |
$[\<identifier\>] |
Sì |
addToSet |
Sì |
pop |
Sì |
pullAll |
Sì |
pull |
Sì |
push |
Sì |
pushAll |
Sì |
Modificatori aggiornamento
Comando | Supportato |
---|---|
each |
Sì |
slice |
Sì |
sort |
Sì |
position |
Sì |
Operatore di aggiornamento bit per bit
Comando | Supportato |
---|---|
bit |
Sì |
bitsAllSet |
Numero |
bitsAnySet |
Numero |
bitsAllClear |
Numero |
bitsAnyClear |
No |
Operatori geospaziali
Operatore | Supportato |
---|---|
$geoWithin |
Sì |
$geoIntersects |
Sì |
$near |
Sì |
$nearSphere |
Sì |
$geometry |
Sì |
$minDistance |
Sì |
$maxDistance |
Sì |
$center |
Numero |
$centerSphere |
Numero |
$box |
Numero |
$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, in cui il driver crittografa in modo esplicito ogni campo quando viene scritto, è supportato. La crittografia automatica non è supportata. È supportata la decrittografia esplicita e la decrittografia automatica.
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 i comandi di replica manuale.
Scritture ritentabili
La funzionalità di scrittura riprovabile 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 di filtro di query o aggiornamento.
Ad esempio, con una raccolta partizionata partizionata nella "country"
chiave, 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 riprovabile è abilitata.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Successdb.coll.deleteMany({"city": "NYC"})
- Errore ShardKeyNotFound(61)
Nota
Le scritture riprovabili non supportano le scritture bulk non ordinate in questo momento. Se si desidera eseguire operazioni di scrittura bulk con scritture riprovabili 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 lato server.
Durata (TTL)
Azure Cosmos DB supporta una durata (TTL) basata sul timestamp del documento. È possibile abilitare la durata (TTL) per una raccolta nella portale di Azure.
TTL personalizzato
Questa funzionalità consente di impostare una durata (TTL) personalizzata in qualsiasi campo di una raccolta.
In una raccolta in cui è abilitata la durata (TTL) in un campo:
I tipi accettabili sono il tipo di dati BSON e i tipi numerici (integer, long o double), che verranno interpretati come timestamp unix millisecondi 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 un TTL impostato su di esso.
Con un set di campi TTL personalizzato, il campo non può essere usato per la
\_ts
scadenza del documento.Non è possibile usare anche il
\_ts
campo .
Configurazione
È possibile abilitare un TTL personalizzato aggiornando la EnableTtlOnCustomPath
funzionalità per l'account. Informazioni su come configurare le funzionalità.
Configurare la durata (TTL)
Per configurare il 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 non partizionata. Le transazioni multidocumento non sono supportate tra raccolte o raccolte partizionate. Il timeout per le transazioni è fisso di 5 secondi.
Gestire utenti e ruoli
Azure Cosmos DB non supporta ancora utenti e ruoli. Azure Cosmos DB supporta tuttavia il controllo degli accessi in base al ruolo di Azure e le password e le chiavi di sola lettura e di lettura che possono essere ottenute tramite il portale di Azure (nella pagina Stringhe di Connessione).
Scrivere problemi
Alcune applicazioni si basano su un problema di scrittura, che specifica il numero di risposte necessarie durante un'operazione di scrittura. A causa del modo in cui Azure Cosmos DB gestisce la replica in background, tutte le scritture vengono automaticamente quorum per impostazione predefinita. Qualsiasi problema di scrittura specificato dal codice client viene ignorato. Informazioni su come usare i livelli di coerenza per ottimizzare la disponibilità e le prestazioni.
Passaggi successivi
- Informazioni su come usare Studio 3T con Azure Cosmos DB per MongoDB.
- Informazioni su come usare Robo 3T con Azure Cosmos DB per MongoDB.
- Esplorare gli esempi di MongoDB con Azure Cosmos DB per 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 tutto ciò che si sa è il numero di vCore e server nel cluster di database esistente, leggere le informazioni sulla stima delle unità richiesta usando vCore o vCPU.
- Se si conoscono le tariffe delle richieste tipiche per il carico di lavoro del database corrente, leggere le informazioni sulla stima delle unità richiesta usando Lo strumento di pianificazione della capacità di Azure Cosmos DB.