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 ] } } }
$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 , 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.