Azure Cosmos DB for MongoDB versione 3.2: funzionalità e sintassi supportate
SI APPLICA A: MongoDB
Azure Cosmos DB è il servizio di database multi-modello distribuito globalmente di Microsoft. È possibile comunicare con Azure Cosmos DB for MongoDB usando uno dei driver client MongoDB open source. Azure Cosmos DB for MongoDB consente di usare driver client esistenti aderendo al protocollo di collegamento MongoDB.
Usando Azure Cosmos DB for MongoDB è possibile sfruttare i noti vantaggi di MongoDB con tutte le funzionalità aziendali offerte da Azure Cosmos DB: distribuzione globale, partizionamento orizzontale automatico, garanzie di disponibilità e latenza, indicizzazione automatica di ogni campo, crittografia di dati inattivi, backup e molto altro.
Nota
La versione 3.2 di Azure Cosmos DB for MongoDB non prevede piani correnti di fine vita (EOL). Il preavviso minimo per un futuro EOL è di tre anni.
Protocolli supportati
Tutti i nuovi account per Azure Cosmos DB for MongoDB sono compatibili con la versione 3.6 del server MongoDB. Questo articolo riguarda la versione 3.2 di MongoDB. Gli operatori supportati con i relativi limiti ed eccezioni sono elencati di seguito. I driver client che identificano questi protocolli dovrebbero essere in grado di collegarsi ad Azure Cosmos DB for MongoDB.
Azure Cosmos DB for MongoDB offre anche un'esperienza di aggiornamento facilitato per gli account idonei. Per altre informazioni, vedere la Guida all'aggiornamento della versione di MongoDB.
Linguaggi di query supportati
Azure Cosmos DB for MongoDB offre il supporto completo dei 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 for MongoDB supporta i comandi di database seguenti:
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 Azure Cosmos DB for MongoDB.
Comandi per le operazioni di query e scrittura
delete
find
findAndModify
getLastError
getMore
insert
update
Comandi di autenticazione
logout
authenticate
getnonce
Comandi di amministrazione
dropDatabase
listCollections
drop
create
filemd5
createIndexes
listIndexes
dropIndexes
connectionStatus
reIndex
Comandi di diagnostica
buildInfo
collStats
dbStats
hostInfo
listDatabases
whatsmyuri
Pipeline di aggregazione
Comandi di aggregazione
aggregate
count
distinct
Fasi di aggregazione
$project
$match
$limit
$skip
$unwind
$group
$sample
$sort
$lookup
$out
$count
$addFields
Espressioni di aggregazione
Espressioni booleane
$and
$or
$not
Espressioni Set
$setEquals
$setIntersection
$setUnion
$setDifference
$setIsSubset
$anyElementTrue
$allElementsTrue
Espressioni di confronto
$cmp
$eq
$gt
$gte
$lt
$lte
$ne
Espressioni aritmetiche
$abs
$add
$ceil
$divide
$exp
$floor
$ln
$log
$log10
$mod
$multiply
$pow
$sqrt
$subtract
$trunc
Espressioni stringa
$concat
$indexOfBytes
$indexOfCP
$split
$strLenBytes
$strLenCP
$strcasecmp
$substr
$substrBytes
$substrCP
$toLower
$toUpper
Espressioni di matrice
$arrayElemAt
$concatArrays
$filter
$indexOfArray
$isArray
$range
$reverseArray
$size
$slice
$in
Espressioni di data
$dayOfYear
$dayOfMonth
$dayOfWeek
$year
$month
$week
$hour
$minute
$second
$millisecond
$isoDayOfWeek
$isoWeek
Espressioni condizionali
$cond
$ifNull
Accumulatori di aggregazione
$sum
$avg
$first
$last
$max
$min
$push
$addToSet
Operatori
Sono supportati gli operatori seguenti con esempi di uso. Vedere questo documento di esempio usato nelle query seguenti:
{
"Volcano Name": "Rainier",
"Country": "United States",
"Region": "US-Washington",
"Location": {
"type": "Point",
"coordinates": [
-121.758,
46.87
]
},
"Elevation": 4392,
"Type": "Stratovolcano",
"Status": "Dendrochronology",
"Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
Operatore | Esempio |
---|---|
eq |
{ "Volcano Name": { $eq: "Rainier" } } |
gt |
{ "Elevation": { $gt: 4000 } } |
gte |
{ "Elevation": { $gte: 4392 } } |
lt |
{ "Elevation": { $lt: 5000 } } |
lte |
{ "Elevation": { $lte: 5000 } } |
ne |
{ "Elevation": { $ne: 1 } } |
in |
{ "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } } |
nin |
{ "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } } |
or |
{ $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
and |
{ $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
not |
{ "Elevation": { $not: { $gt: 5000 } } } |
nor |
{ $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] } |
exists |
{ "Status": { $exists: true } } |
type |
{ "Status": { $type: "string" } } |
mod |
{ "Elevation": { $mod: [ 4, 0 ] } } |
regex |
{ "Volcano Name": { $regex: "^Rain"} } |
Note
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.
La query originale find({x:{$regex: /^abc$/})
deve essere ad esempio modificata in 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 di aggiornamento
Operatori di aggiornamento di campo
$inc
$mul
$rename
$setOnInsert
$set
$unset
$min
$max
$currentDate
Operatori di aggiornamento di matrice
$addToSet
$pop
$pullAll
$pull
(Nota: $pull con una condizione non è supportata)$pushAll
$push
$each
$slice
$sort
$position
Operatore di aggiornamento bit per bit
$bit
Operatori geospaziali
Operatore | Esempio | Supportata |
---|---|---|
$geoWithin |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Sì |
$geoIntersects |
{ "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
Sì |
$near |
{ "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
Sì |
$nearSphere |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Sì |
$geometry |
{ "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
Sì |
$minDistance |
{ "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } |
Sì |
$maxDistance |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Sì |
$center |
{ "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } |
Sì |
$centerSphere |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Sì |
$box |
{ "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } |
Sì |
$polygon |
{ "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
Sì |
Operazioni di ordinamento
Quando si usa l'operazione findOneAndUpdate
, sono supportate le operazioni di ordinamento in un singolo campo, ma non quelle su più campi.
Altri operatori
Operatore | Esempio | Note |
---|---|---|
$all |
{ "Location.coordinates": { $all: [-121.758, 46.87] } } |
|
$elemMatch |
{ "Location.coordinates": { $elemMatch: { $lt: 0 } } } |
|
$size |
{ "Location.coordinates": { $size: 2 } } |
|
$comment |
{ "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"} |
|
$text |
Non supportato. In alternativa, usare $regex. |
Operatori non supportati
Gli operatori $where
e $eval
non sono supportati da Azure Cosmos DB.
Metodi
Sono supportati i metodi seguenti:
Metodi di cursore
metodo | Esempio | Note |
---|---|---|
cursor.sort() |
cursor.sort({ "Elevation": -1 }) |
I documenti senza chiave di ordinamento non vengono restituiti |
Indici univoci
Azure Cosmos DB indicizza tutti i campi dei documenti scritti nel database per impostazione predefinita. Gli indici univoci assicurano che un campo specifico non abbia valori duplicati in tutti i documenti di una raccolta, in modo simile alla preservazione dell'univocità per la chiave _id
predefinita. È possibile creare indici personalizzati in Azure Cosmos DB usando il comando createIndex, includendo il vincolo 'unique'.
Gli indici univoci sono disponibili per tutti gli account Azure Cosmos DB tramite Azure Cosmos DB for MongoDB.
Durata (TTL)
Azure Cosmos DB supporta solo una durata (TTL) a livello di raccolta (_ts) nella versione 3.2. Eseguire l'aggiornamento alle versioni 3.6 e successive per sfruttare altre forme di durata (TTL).
Gestione 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/password di lettura/scrittura e sola lettura ottenibili tramite il portale di Azure nella pagina Stringa di connessione.
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 comandi di replica manuali.
Write concern
Alcune applicazioni si basano su 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.
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 manuali, ovvero non è necessario richiamare comandi come pshardCollection, addShard, balancerStart, moveChunk e così via. È sufficiente specificare la chiave di partizione durante la creazione dei contenitori o l'esecuzione di query sui dati.
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.