Azure Cosmos DB per MongoDB (versione 3.2): 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, indicizzazione automatica di ogni campo, crittografia dei dati inattivi, backup e molto altro ancora.
Nota
La versione 3.2 di Azure Cosmos DB per MongoDB non prevede piani correnti per la fine della vita (EOL). Il preavviso minimo per un futuro EOL è di tre anni.
Protocolli supportati
Tutti i nuovi account per Azure Cosmos DB per MongoDB sono compatibili con il server MongoDB versione 3.6. Questo articolo riguarda la versione 3.2 di MongoDB. 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.
Azure Cosmos DB per MongoDB offre anche un'esperienza di aggiornamento semplice per gli account idonei. Per altre informazioni, vedere la Guida all'aggiornamento della versione di 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:
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.
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 condizione non è supportata)$pushAll
$push
$each
$slice
$sort
$position
Operatore di aggiornamento bit per bit
$bit
Operatori geospaziali
Operatore | Esempio | Supportato |
---|---|---|
$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
, le operazioni di ordinamento su un singolo campo sono supportate, ma le operazioni di ordinamento su più campi non sono supportate.
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 $where
operatori 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, incluso il vincolo 'unique'.
Gli indici univoci sono disponibili per tutti gli account Azure Cosmos DB con Azure Cosmos DB per 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+ per sfruttare altri tipi di TTL.
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).
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.
Write concern
Alcune applicazioni si basano su un Write concern che definisce 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.
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 shardCollection, 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 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.