Condividi tramite


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 ] } } }
$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 ] ] ] } } } }
$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 ] ] ] } } } }
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$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 ] ] ] } } } }
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$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 ] ] ] } } } }

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.