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
- Naučte se používat Studio 3T se službou Azure Cosmos DB pro MongoDB.
- Naučte se používat Robo 3T se službou Azure Cosmos DB pro MongoDB.
- Prozkoumejte ukázky MongoDB se službou Azure Cosmos DB pro MongoDB.