Azure Cosmos DB pro MongoDB (verze serveru 4.0): podporované funkce a syntaxe
Článek
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, se všemi podnikovými funkcemi, které poskytuje Azure Cosmos DB: globální distribuci, automatické horizontální dělení, záruky dostupnosti a latence, šifrování neaktivních uložených dat, zálohování a mnoho dalšího.
Podpora protokolu
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. Při vytváření účtů Azure Cosmos DB for MongoDB mají verze účtů 3.6 a novější koncový bod ve formátu *.mongo.cosmos.azure.com , zatímco verze účtů 3.2 má koncový bod ve formátu *.documents.azure.com.
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.
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:
$lookup zatím nepodporuje funkci nesouvisejících poddotazů zavedenou na serveru verze 3.6. Při pokusu o použití operátoru s poli a pipeline polí se zobrazí chyba se zprávou, která obsahujelet is not supported.let$lookup
Logické výrazy
Příkaz
Podporováno
and
Ano
not
Ano
or
Yes
Převodní výrazy
Příkaz
Podporováno
convert
Ano
toBool
Ano
toDate
Ano
toDecimal
Ano
toDouble
Ano
toInt
Ano
toLong
Ano
toObjectId
Ano
toString
Yes
Nastavovací výrazy
Příkaz
Podporováno
setEquals
Ano
setIntersection
Ano
setUnion
Ano
setDifference
Ano
setIsSubset
Ano
anyElementTrue
Ano
allElementsTrue
Yes
Porovnávací výrazy
Poznámka:
Rozhraní API pro MongoDB nepodporuje porovnávací výrazy s literálem pole v dotazu.
Příkaz
Podporováno
cmp
Ano
eq
Ano
gt
Ano
gte
Ano
lt
Ano
lte
Ano
ne
Ano
in
Ano
nin
Yes
Aritmetické výrazy
Příkaz
Podporováno
abs
Ano
add
Ano
ceil
Ano
divide
Ano
exp
Ano
floor
Ano
ln
Ano
log
Ano
log10
Ano
mod
Ano
multiply
Ano
pow
Ano
sqrt
Ano
subtract
Ano
trunc
Yes
Řetězcové výrazy
Příkaz
Podporováno
concat
Ano
indexOfBytes
Ano
indexOfCP
Ano
ltrim
Ano
rtrim
Ano
trim
Ano
split
Ano
strLenBytes
Ano
strLenCP
Ano
strcasecmp
Ano
substr
Ano
substrBytes
Ano
substrCP
Ano
toLower
Ano
toUpper
Yes
Operátor vyhledávání textu
Příkaz
Podporováno
meta
No
Maticové výrazy
Příkaz
Podporováno
arrayElemAt
Ano
arrayToObject
Ano
concatArrays
Ano
filter
Ano
indexOfArray
Ano
isArray
Ano
objectToArray
Ano
range
Ano
reverseArray
Ano
reduce
Ano
size
Ano
slice
Ano
zip
Ano
in
Yes
Operátory proměnných
Příkaz
Podporováno
map
Ano
let
Yes
Systémové proměnné
Příkaz
Podporováno
$$CURRENT
Ano
$$DESCEND
Ano
$$KEEP
Ano
$$PRUNE
Ano
$$REMOVE
Ano
$$ROOT
Yes
Operátor literálu
Příkaz
Podporováno
literal
Ano
Datumové výrazy
Příkaz
Podporováno
dayOfYear
Ano
dayOfMonth
Ano
dayOfWeek
Ano
year
Ano
month
Ano
week
Ano
hour
Ano
minute
Ano
second
Ano
millisecond
Ano
dateToString
Ano
isoDayOfWeek
Ano
isoWeek
Ano
dateFromParts
Ano
dateToParts
Ano
dateFromString
Ano
isoWeekYear
Yes
Podmíněné výrazy
Příkaz
Podporováno
cond
Ano
ifNull
Ano
switch
Yes
Operátor datového typu
Příkaz
Podporováno
type
Ano
Výrazy akumulátoru
Příkaz
Podporováno
sum
Ano
avg
Ano
first
Ano
last
Ano
max
Ano
min
Ano
push
Ano
addToSet
Ano
stdDevPop
Ano
stdDevSamp
Yes
Operátor sloučení
Příkaz
Podporováno
mergeObjects
Ano
Datové typy
Azure Cosmos DB pro MongoDB podporuje dokumenty kódované ve formátu MongoDB BSON. Verze rozhraní API 4.0 vylepšuje interní využití tohoto formátu, aby se zlepšil výkon a snížily náklady. Dokumenty napsané nebo aktualizované prostřednictvím koncového bodu, na kterém běží verze 4.0 nebo novější, můžete využít optimalizace.
Ve scénáři upgradu nebudou dokumenty napsané před upgradem verze 4.0+ těžit z vyššího výkonu, dokud se neaktualizují prostřednictvím operace zápisu prostřednictvím koncového bodu 4.0+ .
Podpora 16MB dokumentů zvyšuje limit velikosti dokumentů z 2 MB na 16 MB. Tento limit se vztahuje pouze na kolekce vytvořené po povolení této funkce. Jakmile se tato funkce pro váš databázový účet povolí, nedá se zakázat.
Povolení 16 MB je možné provést na kartě funkce na webu Azure Portal nebo programově přidáním možnosti EnableMongo16MBDocumentSupport.
Doporučujeme povolit opakování na straně serveru a vyhnout se indexům zástupných znaků, aby žádosti s většími dokumenty byly úspěšné. V případě potřeby může zvýšení výkonu zvýšit počet RU databáze nebo kolekce.
Příkaz
Podporováno
Double
Ano
String
Ano
Object
Ano
Array
Ano
Binary Data
Ano
ObjectId
Ano
Boolean
Ano
Date
Ano
Null
Ano
32-bit Integer (int)
Ano
Timestamp
Ano
64-bit Integer (long)
Ano
MinKey
Ano
MaxKey
Ano
Decimal128
Ano
Regular Expression
Ano
JavaScript
Ano
JavaScript (with scope)
Ano
Undefined
Yes
Indexy a vlastnosti indexu
Indexy
Příkaz
Podporováno
Single Field Index
Ano
Compound Index
Ano
Multikey Index
Ano
Text Index
Ne
2dsphere
Ano
2d Index
No
Hashed Index
Ne
Vlastnosti indexu
Příkaz
Podporováno
TTL
Ano
Unique
Ano
Partial
No
Case Insensitive
No
Sparse
No
Background
Ano
Operátory
Logické operátory
Příkaz
Podporováno
or
Ano
and
Ano
not
Ano
nor
Yes
Operátory elementů
Příkaz
Podporováno
exists
Ano
type
Yes
Operátory dotazů pro vyhodnocení
Příkaz
Podporováno
expr
Yes
jsonSchema
Ne
mod
Ano
regex
Yes
text
Ne (nepodporuje se. Místo toho použijte $regex.)
where
No
V $regex dotazech umožňují výrazy ukotvené doleva vyhledává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 vzhledem k následujícímu původnímu dotazu: find({x:{$regex: /^abc$/})musí být upraven 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/}] }).
Operátory polí
Příkaz
Podporováno
all
Ano
elemMatch
Ano
size
Yes
Operátor komentáře
Příkaz
Podporováno
comment
Ano
Operátory projekce
Příkaz
Podporováno
elemMatch
Yes
meta
Ne
slice
Ano
Aktualizační operátory
Operátory pro aktualizaci polí
Příkaz
Podporováno
inc
Ano
mul
Ano
rename
Ano
setOnInsert
Ano
set
Ano
unset
Ano
min
Ano
max
Ano
currentDate
Yes
Operátory pro aktualizaci matic
Příkaz
Podporováno
$
Ano
$[]
Ano
$[\<identifier\>]
Ano
addToSet
Ano
pop
Ano
pullAll
Ano
pull
Ano
push
Ano
pushAll
Yes
Modifikátory aktualizací
Příkaz
Podporováno
each
Ano
slice
Ano
sort
Ano
position
Yes
Operátor pro bitovou aktualizaci
Příkaz
Podporováno
bit
Yes
bitsAllSet
No
bitsAnySet
No
bitsAllClear
No
bitsAnyClear
Ne
Geoprostorové operátory
Operátor
Podporováno
$geoWithin
Ano
$geoIntersects
Ano
$near
Ano
$nearSphere
Ano
$geometry
Ano
$minDistance
Ano
$maxDistance
Ano
$center
No
$centerSphere
No
$box
No
$polygon
Ne
Operace řazení
Při použití findOneAndUpdate operace s rozhraním API pro MongoDB verze 4.0 se podporují operace řazení v jednom poli a více polích. Operace řazení na více polích byly omezením předchozích drátových protokolů.
Indexování
Rozhraní API pro MongoDB podporuje různé indexy , které umožňují řazení podle více polí, zlepšení výkonu dotazů a vynucování jedinečnosti.
GridFS
Azure Cosmos DB podporuje GridFS prostřednictvím jakéhokoli ovladače Mongo kompatibilního s GridFS.
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.
Opakovatelné zápisy
Opakovatelné zápisy umožňují ovladačům MongoDB automaticky opakovat určité operace zápisu, pokud došlo k selhání, ale výsledkem jsou přísnější požadavky na určité operace, které odpovídají požadavkům protokolu MongoDB. Pokud je tato funkce povolená, operace aktualizace, včetně odstranění, budou v horizontálně dělených kolekcích vyžadovat zahrnutí klíče horizontálního oddílu do příkazu filtru dotazu nebo příkazu update.
Například s horizontálně dělenou kolekcí horizontálně dělenou podle klíče "country": Pokud chcete odstranit všechny dokumenty s městem = "NYC" pole, aplikace bude muset provést operaci pro všechny hodnoty klíče horizontálního oddílu (země), pokud jsou povolené opakovatelné zápisy.
db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Úspěch
db.coll.deleteMany({"city": "NYC"}) – Selhání s chybou ShardKeyNotFound(61)
Poznámka:
Opakovatelné zápisy v tuto chvíli nepodporují hromadné neuspořádané zápisy. Pokud chcete provádět hromadné zápisy s povolenými opakovanými zápisy, proveďte hromadně seřazené zápisy.
Pokud chcete tuto funkci povolit, přidejte do svého databázového účtu funkci EnableMongoRetryableWrites. Tuto funkci je také možné povolit na kartě funkce na webu Azure Portal.
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 addShard, balancerStart, moveChunk atd. Při vytváření kontejnerů nebo dotazování dat stačí zadat klíč horizontálního oddílu.
Přednášky
Azure Cosmos DB zatím nepodporuje příkazy relací na straně serveru.
Hodnota TTL (Time-To-Live)
Azure Cosmos DB podporuje hodnotu TTL (Time to Live) založenou na časovém razítku dokumentu. Hodnotu TTL je možné povolit pro kolekce z webu Azure Portal.
Transakce
Transakce s více dokumenty jsou podporovány v rámci nehardované kolekce. Transakce s více dokumenty nejsou podporovány napříč kolekcemi ani v horizontálně dělených kolekcích. Časový limit pro transakce je pevný 5 sekund.
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).
Write Concern
Některé aplikace spoléhají na problém při zápisu, 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.