Condividi tramite


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
delete
eval No
find
findAndModify
getLastError
getMore
getPrevError No
insert
parallelCollectionScan No
resetError No
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 tra partizioni non sono ancora supportate nell'API per MongoDB.

Comando Supportata
abortTransaction
commitTransaction

Comandi di autenticazione

Comando Supportata
authenticate
getnonce
logout

Comandi di amministrazione

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

Comandi di diagnostica

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

Pipeline di aggregazione

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

Comandi di aggregazione

Comando Supportata
aggregate
count
distinct
mapReduce No

Fasi di aggregazione

Comando Supportata
addFields
bucket No
bucketAuto No
changeStream
collStats No
count
currentOp No
facet
geoNear
graphLookup No
group
indexStats No
limit
listLocalSessions No
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 $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
not
or

Espressioni di conversione

Comando Supportata
convert
toBool
toDate
toDecimal
toDouble
toInt
toLong
toObjectId
toString

Espressioni Set

Comando Supportata
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 Supportata
cmp
eq
gt
gte
lt
lte
ne
in
nin

Espressioni aritmetiche

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

Espressioni trigonometriche

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

Espressioni stringa

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

Operatore di ricerca testo

Comando Supportata
meta No

Espressioni di matrice

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

Operatori variabili

Comando Supportata
map
let

Variabili di sistema

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

Operatore letterale

Comando Supportata
literal

Espressioni di data

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

Espressioni condizionali

Comando Supportata
cond
ifNull
switch

Operatore tipo di dati

Comando Supportata
type

Espressioni accumulatore

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

Operatore merge

Comando Supportata
mergeObjects

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 EnableMongo16MBDocumentSupportfunzionalità 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
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 for MongoDB supporta i comandi di indice e le proprietà di indice seguenti.

Indici

Comando Supportata
Single Field Index
Compound Index
Multikey Index
Text Index No
2dsphere
2d Index No
Hashed Index No

Proprietà degli indici

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

Operatori

Azure Cosmos DB for MongoDB supporta gli operatori seguenti.

Operatori logici

Comando Supportata
or
and
not
nor

Operatori elemento

Comando Supportata
exists
type

Operatori di query di valutazione

Comando Supportata
expr
jsonSchema No
mod
regex
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
elemMatch
size

Operatore commento

Comando Supportata
comment

Operatori proiezione

Comando Supportata
elemMatch
meta No
slice

Operatori di aggiornamento

Operatori di aggiornamento di campo

Comando Supportata
inc
mul
rename
setOnInsert
set
unset
min
max
currentDate

Operatori di aggiornamento di matrice

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

Modificatori aggiornamento

Comando Supportata
each
slice
sort
position

Operatore di aggiornamento bit per bit

Comando Supportata
bit
bitsAllSet No
bitsAnySet No
bitsAllClear No
bitsAnyClear No

Operatori geospaziali

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