Azure Cosmos DB pro MongoDB (verze 3.2): podporované funkce a syntaxe
PLATÍ PRO: MongoDB
Azure Cosmos DB je celosvětově rozšířená vícemodelová databázová služba společnosti Microsoft. Ke komunikaci se službou Azure Cosmos DB for MongoDB můžete použít kterýkoli z opensourcových klientských ovladačů MongoDB. Azure Cosmos DB for MongoDB umožňuje používat existující klientské ovladače tím, že dodržuje protokol přenosu MongoDB.
Pomocí služby Azure Cosmos DB pro MongoDB můžete využívat výhody MongoDB, které používáte, se všemi podnikovými funkcemi, které poskytuje Azure Cosmos DB: 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 na 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 měl být schopný se připojit ke službě Azure Cosmos DB for MongoDB.
Azure Cosmos DB pro MongoDB také nabízí bezproblémové prostředí upgradu pro oprávněné účty. Přečtěte si další informace o 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í pouze 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í delete()
příkazy a update()
příkazy 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"} } |
Notes
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ů regulárních výrazů.
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 není podporováno)$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 ] } } } |
Ano |
$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 ] ] ] } } } } |
Ano |
$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 ] ] ] } } } } |
Ano |
$nearSphere |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ano |
$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 ] ] ] } } } } |
Ano |
$minDistance |
{ "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } |
Ano |
$maxDistance |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ano |
$center |
{ "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } |
Ano |
$centerSphere |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Ano |
$box |
{ "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } |
Ano |
$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 operace řazení v jednom poli podporují, ale operace řazení na více polích se nepodporují.
Další operátory
Operátor | Příklad | Notes |
---|---|---|
$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 $eval
operátory.
Metody
Podporují se následující metody:
Metody kurzoru
metoda | Příklad | Notes |
---|---|---|
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í, že určité pole nemá duplicitní hodnoty ve všech dokumentech v kolekci, podobně jako u výchozího _id
klíče je zachována jedinečnost. Vlastní indexy ve službě Azure Cosmos DB můžete 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 verze 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 Azure (Azure RBAC) a hesla a klíče jen pro čtení a čtení, která je možné získat prostřednictvím webu Azure Portal (stránka připojovacího řetězce).
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 ruční replikace.
Write Concern
Některé aplikace spoléhají na problém se 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 automaticky kvorum ve výchozím nastavení. Všechny obavy týkající se zápisu určené kódem klienta 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í, umístění a vyrovnávání horizontálních oddílů automaticky. Azure Cosmos DB nepodporuje ruční příkazy horizontálního dělení, což znamená, že nemusíte volat příkazy, jako jsou shardCollection, addShard, balancerStart, moveChunk atd. Při vytváření kontejnerů nebo dotazování dat stačí zadat klíč horizontálního oddílu.
Další kroky
- Naučte se používat Studio 3T se službou Azure Cosmos DB pro MongoDB.
- Zjistěte, jak používat Robo 3T se službou Azure Cosmos DB pro MongoDB.
- Prozkoumejte ukázky MongoDB pomocí služby Azure Cosmos DB pro MongoDB.