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
delete
eval Numero
find
findAndModify
getLastError
getMore
getPrevError Numero
insert
parallelCollectionScan Numero
resetError Numero
update

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
commitTransaction

Comandi di autenticazione

Comando Supportato
authenticate
getnonce
logout

Comandi di amministrazione

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

Comandi di diagnostica

Comando Supportato
buildInfo
collStats
connPoolStats Numero
connectionStatus Numero
dataSize Numero
dbHash Numero
dbStats
explain
features Numero
hostInfo
listDatabases
listCommands Numero
profiler Numero
serverStatus Numero
top Numero
whatsmyuri

Pipeline di aggregazione

Azure Cosmos DB per MongoDB supporta i comandi di aggregazione seguenti.

Comandi di aggregazione

Comando Supportato
aggregate
count
distinct
mapReduce No

Fasi di aggregazione

Comando Supportato
addFields
bucket Numero
bucketAuto Numero
changeStream
collStats Numero
count
currentOp Numero
facet
geoNear
graphLookup Numero
group
indexStats Numero
limit
listLocalSessions Numero
listSessions No
lookup Parziale
match
merge
out
planCacheStats
project
redact
regexFind
regexFindAll
regexMatch
replaceRoot
replaceWith
sample
set
skip
sort
sortByCount
unset
unwind

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
not
or

Espressioni di conversione

Comando Supportato
convert
toBool
toDate
toDecimal
toDouble
toInt
toLong
toObjectId
toString

Espressioni Set

Comando Supportato
setEquals
setIntersection
setUnion
setDifference
setIsSubset
anyElementTrue
allElementsTrue

Espressioni di confronto

Nota

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

Comando Supportato
cmp
eq
gt
gte
lt
lte
ne
in
nin

Espressioni aritmetiche

Comando Supportato
abs
add
ceil
divide
exp
floor
ln
log
log10
mod
multiply
pow
round
sqrt
subtract
trunc

Espressioni trigonometria

Comando Supportato
acos
acosh
asin
asinh
atan
atan2
atanh
cos
cosh
degreesToRadians
radiansToDegrees
sin
sinh
tan
tanh

Espressioni stringa

Comando Supportato
concat
indexOfBytes
indexOfCP
ltrim
rtrim
trim
split
strLenBytes
strLenCP
strcasecmp
substr
substrBytes
substrCP
toLower
toUpper

Operatore di ricerca testo

Comando Supportato
meta No

Espressioni di matrice

Comando Supportato
arrayElemAt
arrayToObject
concatArrays
filter
indexOfArray
isArray
objectToArray
range
reverseArray
reduce
size
slice
zip
in

Operatori variabili

Comando Supportato
map
let

Variabili di sistema

Comando Supportato
$$CLUSTERTIME
$$CURRENT
$$DESCEND
$$KEEP
$$NOW
$$PRUNE
$$REMOVE
$$ROOT

Operatore letterale

Comando Supportato
literal

Espressioni di data

Comando Supportato
dayOfYear
dayOfMonth
dayOfWeek
year
month
week
hour
minute
second
millisecond
dateToString
isoDayOfWeek
isoWeek
dateFromParts
dateToParts
dateFromString
isoWeekYear

Espressioni condizionali

Comando Supportato
cond
ifNull
switch

Operatore tipo di dati

Comando Supportato
type

Espressioni accumulatore

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

Operatore merge

Comando Supportato
mergeObjects

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
String
Object
Array
Binary Data
ObjectId
Boolean
Date
Null
32-bit Integer (int)
Timestamp
64-bit Integer (long)
MinKey
MaxKey
Decimal128
Regular Expression
JavaScript
JavaScript (with scope)
Undefined

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
Compound Index
Multikey Index
Text Index Numero
2dsphere
2d Index Numero
Hashed Index No

Proprietà degli indici

Comando Supportato
TTL
Unique
Partial Supportato solo per indici univoci
Case Insensitive No
Sparse Numero
Background

Operatori

Azure Cosmos DB per MongoDB supporta gli operatori seguenti.

Operatori logici

Comando Supportato
or
and
not
nor

Operatori elemento

Comando Supportato
exists
type

Operatori di query di valutazione

Comando Supportato
expr
jsonSchema Numero
mod
regex
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
elemMatch
size

Operatore commento

Comando Supportato
comment

Operatori proiezione

Comando Supportato
elemMatch
meta Numero
slice

Operatori di aggiornamento

Operatori di aggiornamento di campo

Comando Supportato
inc
mul
rename
setOnInsert
set
unset
min
max
currentDate

Operatori di aggiornamento di matrice

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

Modificatori aggiornamento

Comando Supportato
each
slice
sort
position

Operatore di aggiornamento bit per bit

Comando Supportato
bit
bitsAllSet Numero
bitsAnySet Numero
bitsAllClear Numero
bitsAnyClear No

Operatori geospaziali

Operatore Supportato
$geoWithin
$geoIntersects
$near
$nearSphere
$geometry
$minDistance
$maxDistance
$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"}) - Success
  • db.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, balancerStarte 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à.