Azure Cosmos DB pro MongoDB (serverová verze 4.0): 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 pro 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.

S využitím služby 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í distribuce, 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 pro MongoDB. Při vytváření účtů Azure Cosmos DB pro MongoDB mají účty verze 3.6 nebo novější koncový bod ve formátu *.mongo.cosmos.azure.com , zatímco účty verze 3.2 mají koncový bod ve formátu *.documents.azure.com.

Poznámka

Tento článek obsahuje pouze seznam podporovaných příkazů serveru a nezahrnuje funkce obálky na straně klienta. Funkce obálky na straně klienta, jako deleteMany() jsou a updateMany() interně využívají příkazy delete() serveru a update() . Funkce využívající podporované serverové příkazy 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:

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

Příkaz Podporováno
change streams Yes
delete Yes
eval No
find Yes
findAndModify Yes
getLastError Yes
getMore Yes
getPrevError No
insert Yes
parallelCollectionScan No
resetError No
update Yes

Transakční příkazy

Příkaz Podporováno
abortTransaction Yes
commitTransaction Yes

Příkazy pro ověření

Příkaz Podporováno
authenticate Yes
getnonce Yes
logout Yes

Příkazy pro správu

Příkaz Podporováno
cloneCollectionAsCapped No
collMod No
connectionStatus No
convertToCapped No
copydb No
create Yes
createIndexes Yes
currentOp Yes
drop Yes
dropDatabase Yes
dropIndexes Yes
filemd5 Yes
killCursors Yes
killOp No
listCollections Yes
listDatabases Yes
listIndexes Yes
reIndex Yes
renameCollection No

Příkazy pro diagnostiku

Příkaz Podporováno
buildInfo Yes
collStats Yes
connPoolStats No
connectionStatus No
dataSize No
dbHash No
dbStats Yes
explain Yes
features No
hostInfo Yes
listDatabases Yes
listCommands No
profiler No
serverStatus No
top No
whatsmyuri Yes

Agregační zřetězení

Příkazy pro agregaci

Příkaz Podporováno
aggregate Yes
count Yes
distinct Yes
mapReduce No

Fáze agregace

Příkaz Podporuje se
addFields Yes
bucket No
bucketAuto No
changeStream Yes
collStats No
count Yes
currentOp No
facet Yes
geoNear Yes
graphLookup Yes
group Yes
indexStats No
limit Yes
listLocalSessions No
listSessions No
lookup Částečné
match Yes
out Yes
project Yes
redact Yes
replaceRoot Yes
replaceWith No
sample Yes
skip Yes
sort Yes
sortByCount Yes
unwind Yes

Poznámka

$lookup zatím nepodporuje funkci nekorelových poddotazů zavedenou na serveru verze 3.6. Zobrazí se chyba se zprávou, která obsahuje let is not supported , pokud se pokusíte použít $lookup operátor s let poli a pipeline .

Logické výrazy

Příkaz Podporuje se
and Yes
not Yes
or Yes

Výrazy převodu

Příkaz Podporováno
convert Yes
toBool Yes
toDate Yes
toDecimal Yes
toDouble Yes
toInt Yes
toLong Yes
toObjectId Yes
toString Yes

Nastavovací výrazy

Příkaz Podporuje se
setEquals Yes
setIntersection Yes
setUnion Yes
setDifference Yes
setIsSubset Yes
anyElementTrue Yes
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 Podporuje se
cmp Yes
eq Yes
gt Yes
gte Yes
lt Yes
lte Yes
ne Yes
in Yes
nin Yes

Aritmetické výrazy

Příkaz Podporuje se
abs Yes
add Yes
ceil Yes
divide Yes
exp Yes
floor Yes
ln Yes
log Yes
log10 Yes
mod Yes
multiply Yes
pow Yes
sqrt Yes
subtract Yes
trunc Yes

Řetězcové výrazy

Příkaz Podporuje se
concat Yes
indexOfBytes Yes
indexOfCP Yes
ltrim Yes
rtrim Yes
trim Yes
split Yes
strLenBytes Yes
strLenCP Yes
strcasecmp Yes
substr Yes
substrBytes Yes
substrCP Yes
toLower Yes
toUpper Yes

Operátor textového vyhledávání

Příkaz Podporuje se
meta No

Maticové výrazy

Příkaz Podporuje se
arrayElemAt Yes
arrayToObject Yes
concatArrays Yes
filter Yes
indexOfArray Yes
isArray Yes
objectToArray Yes
range Yes
reverseArray Yes
reduce Yes
size Yes
slice Yes
zip Yes
in Yes

Operátory proměnných

Příkaz Podporuje se
map Yes
let Yes

Systémové proměnné

Příkaz Podporuje se
$$CURRENT Yes
$$DESCEND Yes
$$KEEP Yes
$$PRUNE Yes
$$REMOVE Yes
$$ROOT Yes

Operátor literálu

Příkaz Podporováno
literal Yes

Datumové výrazy

Příkaz Podporováno
dayOfYear Yes
dayOfMonth Yes
dayOfWeek Yes
year Yes
month Yes
week Yes
hour Yes
minute Yes
second Yes
millisecond Yes
dateToString Yes
isoDayOfWeek Yes
isoWeek Yes
dateFromParts Yes
dateToParts Yes
dateFromString Yes
isoWeekYear Yes

Podmíněné výrazy

Příkaz Podporováno
cond Yes
ifNull Yes
switch Yes

Operátor datového typu

Příkaz Podporováno
type Yes

Akumulátorové výrazy

Příkaz Podporováno
sum Yes
avg Yes
first Yes
last Yes
max Yes
min Yes
push Yes
addToSet Yes
stdDevPop Yes
stdDevSamp Yes

Operátor sloučení

Příkaz Podporováno
mergeObjects Yes

Typy dat

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. Optimalizace přináší dokumenty napsané nebo aktualizované prostřednictvím koncového bodu se systémem verze 4.0 nebo novější.

Ve scénáři upgradu nebudou dokumenty napsané před upgradem na verzi 4.0+ těžit z vyššího výkonu, dokud se neaktualizují prostřednictvím operace zápisu prostřednictvím koncového bodu verze 4.0 nebo novější.

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 můžete provést na kartě funkce v Azure Portal nebo programově přidáním funkce EnableMongo16MBDocumentSupport.

Doporučujeme povolit opakování na straně serveru a vyhnout se indexům zástupných znaků, abyste zajistili, že požadavky s většími dokumenty budou úspěšné. V případě potřeby může výkonu pomoct také zvýšení jednotek RU pro databázi nebo kolekci.

Příkaz Podporuje se
Double Yes
String Yes
Object Yes
Array Yes
Binary Data Yes
ObjectId Yes
Boolean Yes
Date Yes
Null Yes
32-bit Integer (int) Yes
Timestamp Yes
64-bit Integer (long) Yes
MinKey Yes
MaxKey Yes
Decimal128 Yes
Regular Expression Yes
JavaScript Yes
JavaScript (with scope) Yes
Undefined Yes

Indexy a vlastnosti indexu

Indexy

Příkaz Podporuje se
Single Field Index Yes
Compound Index Yes
Multikey Index Yes
Text Index No
2dsphere Yes
2d Index No
Hashed Index No

Vlastnosti indexu

Příkaz Podporuje se
TTL Yes
Unique Yes
Partial No
Case Insensitive No
Sparse No
Background Yes

Operátory

Logické operátory

Příkaz Podporováno
or Yes
and Yes
not Yes
nor Yes

Operátory elementů

Příkaz Podporováno
exists Yes
type Yes

Operátory zkušebních dotazů

Příkaz Podporováno
expr Yes
jsonSchema No
mod Yes
regex Yes
text Ne (Nepodporuje se. Místo toho použijte $regex.)
where No

V $regex dotazech umožňují výrazy ukotvené vlevo vyhledávání indexů. 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 u následujícího původního dotazu je find({x:{$regex: /^abc$/})nutné ho upravit následujícím způsobem:

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 pole

Příkaz Podporuje se
all Yes
elemMatch Yes
size Yes

Operátor komentáře

Příkaz Podporuje se
comment Yes

Operátory projekce

Příkaz Podporuje se
elemMatch Yes
meta No
slice Yes

Aktualizační operátory

Operátory pro aktualizaci polí

Příkaz Podporuje se
inc Yes
mul Yes
rename Yes
setOnInsert Yes
set Yes
unset Yes
min Yes
max Yes
currentDate Yes

Operátory pro aktualizaci matic

Příkaz Podporuje se
$ Yes
$[] Yes
$[\<identifier\>] Yes
addToSet Yes
pop Yes
pullAll Yes
pull Yes
push Yes
pushAll Yes

Aktualizace modifikátorů

Příkaz Podporuje se
each Yes
slice Yes
sort Yes
position Yes

Operátor pro bitovou aktualizaci

Příkaz Podporuje se
bit Yes
bitsAllSet No
bitsAnySet No
bitsAllClear No
bitsAnyClear No

Geoprostorové operátory

Operátor Podporováno
$geoWithin Yes
$geoIntersects Yes
$near Yes
$nearSphere Yes
$geometry Yes
$minDistance Yes
$maxDistance Yes
$center No
$centerSphere No
$box No
$polygon No

Operace řazení

Při použití findOneAndUpdate operace s rozhraním API pro MongoDB verze 4.0 se podporují operace řazení pro jedno pole a více polí. Operace řazení ve více polích byly omezením předchozích protokolů přenosu.

Indexování

Rozhraní API pro MongoDB podporuje různé indexy , které umožňují řazení podle více polí, zlepšují výkon dotazů a vynucují jedinečnost.

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 pro ruční replikaci.

Opakované zápisy

Opakovaně opakovatelné zápisy umožňují ovladačům MongoDB automaticky opakovat určité operace zápisu v případě selhání, ale výsledkem jsou přísnější požadavky na určité operace, které odpovídají požadavkům na protokol MongoDB. Když je tato funkce povolená, budou operace aktualizace, včetně odstranění, v horizontálně dělených kolekcích vyžadovat, aby byl klíč horizontálního dělení zahrnutý do filtru dotazu nebo příkazu update.

Například s horizontálně dělenou kolekcí horizontálně dělenou podle klíče "země": Pokud chcete odstranit všechny dokumenty s městem = "NYC" pole, bude aplikace muset provést operaci pro všechny hodnoty klíče horizontálního oddílu (země), pokud jsou povolené opakované zápisy.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Úspěch
  • db.coll.deleteMany({"city": "NYC"}) – Selhání s chybou ShardKeyNotFound(61)

Poznámka

Opakované 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 můžete také povolit na kartě funkce v Azure Portal.

Sharding

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

Relace

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) na základě časového razítka dokumentu. Hodnotu TTL je možné povolit pro kolekce z 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ých 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 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).

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.

Další kroky