Azure Cosmos DB pro MongoDB (verze 3.2): podporované funkce a syntaxe

PLATÍ PRO: MongoDB

Azure Cosmos DB je globálně distribuovaná databázová služba Microsoftu pro více modelů. Se službou Azure Cosmos DB for MongoDB můžete komunikovat pomocí libovolného opensourcového klientského ovladače MongoDB. Azure Cosmos DB pro MongoDB umožňuje použití existujících klientských ovladačů dodržováním přenosového protokolu MongoDB.

Díky službě Azure Cosmos DB pro MongoDB můžete využívat výhody MongoDB, na které jste zvyklí, se všemi podnikovými funkcemi, které Azure Cosmos DB poskytuje: globální distribuci, automatické horizontální dělení, záruky dostupnosti a latence, automatické indexování všech polí, šifrování neaktivních uložených dat, zálohování a mnoho dalšího.

Poznámka

Verze 3.2 služby Azure Cosmos DB pro MongoDB nemá žádné aktuální plány pro ukončení životnosti (EOL). Minimální oznámení pro budoucí EOL je tři roky.

Podpora protokolu

Všechny nové účty pro Azure Cosmos DB pro MongoDB jsou kompatibilní se serverem MongoDB verze 3.6. Tento článek se věnuje MongoDB verze 3.2. Podporované operátory a případná omezení nebo výjimky jsou uvedené níže. Každý klientský ovladač, který těmto protokolům rozumí, by se měl umět připojit ke službě Azure Cosmos DB for MongoDB.

Azure Cosmos DB pro MongoDB také nabízí bezproblémové prostředí upgradu pro opravňující účty. Další informace najdete v průvodci upgradem verzí MongoDB.

Podpora dotazovacího jazyka

Azure Cosmos DB pro MongoDB poskytuje komplexní podporu konstruktorů dotazovacího jazyka MongoDB. Níže najdete podrobný seznam aktuálně podporovaných operací, operátorů, fází, příkazů a možností.

Databázové příkazy

Azure Cosmos DB pro MongoDB podporuje následující databázové příkazy:

Poznámka

Tento článek uvádí jenom podporované příkazy serveru a vylučuje funkce obálky na straně klienta. Funkce obálky na straně klienta, jako deleteMany() jsou a updateMany() interně využívají příkazy delete() a update() serveru. Funkce využívající podporované příkazy serveru jsou kompatibilní se službou Azure Cosmos DB pro MongoDB.

Příkazy pro dotazovací a zápisové operace

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

Příkazy pro ověření

  • logout
  • authenticate
  • getnonce

Příkazy pro správu

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Příkazy pro diagnostiku

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

Agregační zřetězení

Příkazy pro agregaci

  • aggregate
  • count
  • distinct

Fáze agregace

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Výrazy pro agregaci

Logické výrazy

  • $and
  • $or
  • $not

Nastavovací výrazy

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Porovnávací výrazy

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Aritmetické výrazy

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Řetězcové výrazy

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Maticové výrazy

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Datumové výrazy

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Podmíněné výrazy

  • $cond
  • $ifNull

Agregační zásobníky

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

Operátory

Jsou podporované následující operátory, doplněné o odpovídající příklady použití. V níže uvedených dotazech se používá tento ukázkový dokument:

{
  "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"
}
Operátor Příklad
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"} }

Poznámky

V dotazech $regex umožňují zleva ukotvené výrazy hledání indexu. Použití modifikátorů „i“ (rozlišování malých a velkých písmen) a „m“ (více řádků) ale způsobí, že se kolekce prohledává ve všech výrazech. Pokud je potřeba zahrnout "$" nebo "|", je nejlepší vytvořit dva (nebo více) dotazů regex. Například následující původní dotaz find({x:{$regex: /^abc$/}) by se měl upravit takto: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). V první části se použije index k omezení hledání na dokumenty, které začínají na ^abc a ve druhé části se porovnají přesné položky. Operátor „|“ se chová jako funkce „nebo“ – dotaz find({x:{$regex: /^abc|^def/}) porovnává dokumenty, ve kterých pole „x“ nabývá hodnot, které začínají na „abc“ nebo „def“. Pokud chcete využít index, je doporučeno dotaz rozdělit na dva různé dotazy spojené operátorem $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Aktualizační operátory

Operátory pro aktualizaci polí

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Operátory pro aktualizaci matic

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Poznámka: $pull s podmínkou se nepodporuje.
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operátor pro bitovou aktualizaci

  • $bit

Geoprostorové operátory

Operátor Příklad Podporováno
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$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 ] ] ] } } } } Yes
$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 ] ] ] } } } } Yes
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$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 ] ] ] } } } } Yes
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Yes
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Yes
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Yes
$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 ] ] ] } } } } Yes

Operace řazení

Při použití findOneAndUpdate operace se podporují operace řazení v jednom poli, ale operace řazení ve více polích se nepodporují.

Další operátory

Operátor Příklad Poznámky
$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 Nepodporováno Použijte místo toho $regex.

Nepodporované operátory

Azure $where Cosmos DB nepodporuje operátory $eval a .

Metody

Podporují se následující metody:

Metody kurzoru

Metoda Příklad Poznámky
cursor.sort() cursor.sort({ "Elevation": -1 }) Dokumenty bez klíče řazení se nevrátí

Jedinečné indexy

Azure Cosmos DB standardně indexuje všechna pole v dokumentech, která jsou zapsaná do databáze. Jedinečné indexy zajišťují, aby konkrétní pole nemělo duplicitní hodnoty ve všech dokumentech v kolekci, podobně jako je zachována jedinečnost výchozího _id klíče. Vlastní indexy můžete ve službě Azure Cosmos DB vytvořit pomocí příkazu createIndex, včetně omezení "unique".

Jedinečné indexy jsou k dispozici pro všechny účty služby Azure Cosmos DB pomocí služby Azure Cosmos DB pro MongoDB.

Hodnota TTL (Time-To-Live)

Azure Cosmos DB podporuje pouze hodnotu TTL (Time to Live) na úrovni kolekce (_ts) ve verzi 3.2. Upgradujte na verzi 3.6 nebo novější, abyste mohli využívat jiné formy hodnoty TTL.

Správa uživatelů a rolí

Azure Cosmos DB zatím nepodporuje uživatele a role. Azure Cosmos DB ale podporuje řízení přístupu na základě role v Azure (Azure RBAC) a hesla a klíče jen pro čtení a zápis, které je možné získat prostřednictvím Azure Portal (stránka Připojovací řetězec).

Replikace

Azure Cosmos DB podporuje automatickou nativní replikaci v nejnižších vrstvách. Tato logika umožňuje zároveň dosáhnout nízké latence a globální replikace. Azure Cosmos DB nepodporuje příkazy pro ruční replikaci.

Write Concern

Některé aplikace spoléhají na problém s zápisem , který určuje počet odpovědí požadovaných během operace zápisu. Vzhledem k tomu, jak Azure Cosmos DB zpracovává replikaci na pozadí, jsou všechny zápisy ve výchozím nastavení automaticky kvorum. Všechny obavy o zápis určené klientským kódem se ignorují. Další informace najdete v tématu popisujícím využití úrovní konzistence pro maximalizaci dostupnosti a výkonu.

Sharding

Azure Cosmos DB podporuje automatický sharding na straně serveru. Spravuje vytváření horizontálních oddílů, umísťování a vyrovnávání automaticky. Azure Cosmos DB nepodporuje příkazy pro ruční horizontální dělení, což znamená, že nemusíte volat příkazy, jako jsou shardCollection, addShard, balancerStart, moveChunk atd. Klíč horizontálního dělení stačí zadat pouze při vytváření kontejnerů nebo dotazování dat.

Další kroky