Azure Cosmos DB per MongoDB (versione del server 4.0): funzionalità e sintassi supportate

SI APPLICA A: Mongodb

Azure Cosmos DB è il servizio di database di Microsoft multimodello distribuito a livello globale. È possibile comunicare con Azure Cosmos DB per MongoDB usando uno dei driver client MongoDB open source. Azure Cosmos DB per MongoDB consente l'uso dei driver client esistenti rispettando il 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.

Protocolli supportati

Gli operatori supportati con i relativi limiti ed eccezioni sono elencati di seguito. 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, le versioni 3.6+ degli account hanno l'endpoint nel formato *.mongo.cosmos.azure.com , mentre la versione 3.2 degli account ha l'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 usano i 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. Di seguito è possibile trovare l'elenco dettagliato di operazioni, operatori, fasi, comandi e opzioni attualmente supportati.

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

Comandi di transazione

Comando Supportato
abortTransaction
commitTransaction

Comandi di autenticazione

Comando Supportato
authenticate
getnonce
logout

Comandi di amministrazione

Comando Supportato
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 Supportato
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

Comandi di aggregazione

Comando Supportato
aggregate
count
distinct
mapReduce No

Fasi di aggregazione

Comando Supportato
addFields
bucket No
bucketAuto No
changeStream
collStats No
count
currentOp No
facet
geoNear
graphLookup
group
indexStats No
limit
listLocalSessions No
listSessions No
lookup Partial
match
out
project
redact
replaceRoot
replaceWith No
sample
skip
sort
sortByCount
unwind

Nota

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

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
sqrt
subtract
trunc

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
$$CURRENT
$$DESCEND
$$KEEP
$$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

Tipi di dati

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

In uno scenario di aggiornamento, i documenti scritti prima dell'aggiornamento alla versione 4.0+ non traggono 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 è applicabile 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.

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

È consigliabile abilitare i tentativi lato server ed evitare indici con caratteri jolly per garantire che le richieste con documenti di dimensioni maggiori abbiano esito positivo. Se necessario, la generazione di UR di database/raccolta può contribuire anche alle 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

Indici

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

Proprietà degli indici

Comando Supportato
TTL
Unique
Partial No
Case Insensitive No
Sparse No
Background

Operatori

Operatori logici

Comando Supportato
or
and
not
nor

Operatori elemento

Comando Supportato
exists
type

Operatori di query di valutazione

Comando Supportato
expr
jsonSchema No
mod
regex
text No (non supportato. Usare invece $regex.
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 query regex (o più). La query originale find({x:{$regex: /^abc$/}) deve essere ad esempio modificata come segue:

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

La prima parte userà l'indice per limitare la ricerca ai documenti che iniziano con ^abc, mentre la seconda parte individuerà le 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 usare l'indice è consigliabile per 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 No
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 No
bitsAnySet No
bitsAllClear No
bitsAnyClear No

Operatori geospaziali

Operatore Supportato
$geoWithin
$geoIntersects
$near
$nearSphere
$geometry
$minDistance
$maxDistance
$center No
$centerSphere No
$box No
$polygon No

Operazioni di ordinamento

Quando si usa l'operazione con l'API findOneAndUpdate per MongoDB versione 4.0, sono supportate le operazioni di ordinamento su un singolo campo e 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.

Replica

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 i comandi di replica manuale.

Scritture riprovabili

Le scritture riprovabili consentono ai driver MongoDB di ripetere automaticamente determinate operazioni di scrittura in caso di errore, ma 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 nel filtro di query o nell'istruzione update.

Ad esempio, con una raccolta partizionata, partizionata sulla chiave "country": per eliminare tutti i documenti con la città = "NYC" del campo, l'applicazione dovrà eseguire l'operazione per tutti i valori della chiave di partizione (paese) se sono abilitate scritture riprovabili.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Successo
  • db.coll.deleteMany({"city": "NYC"}) - Ha esito negativo con errore ShardKeyNotFound(61)

Nota

Le scritture riprovabili non supportano le scritture non ordinate in blocco in questo momento. Se si vuole eseguire scritture bulk con scritture riprovabili abilitate, eseguire scritture ordinate in blocco.

Per abilitare la funzionalità, aggiungere la funzionalità EnableMongoRetryableWrites all'account del 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, la selezione e il bilanciamento delle partizioni. Azure Cosmos DB non supporta i comandi di partizionamento orizzontale manuale, il che significa che non è necessario richiamare comandi come addShard, balancerStart, moveChunk e così via. È 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 lato server.

Durata (TTL)

Azure Cosmos DB supporta una durata (TTL) basata sul timestamp del documento. La durata (TTL) può essere abilitata per le raccolte dal portale di Azure.

Transazioni

Le transazioni con più documenti sono supportate all'interno di una raccolta non partizionata. Le transazioni con più documenti non sono supportate tra raccolte o raccolte partizionate. Il timeout per le transazioni è un valore fisso di 5 secondi.

Gestione di 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/chiavi di sola lettura e scrittura che possono essere ottenute tramite la pagina portale di Azure (stringa di connessione).

Write concern

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