Azure Cosmos DB pro MongoDB (verze serveru 4.0): 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, 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:
Příkazy pro dotazovací a zápisové operace
Příkaz | Podporováno |
---|---|
change streams |
Ano |
delete |
Ano |
eval |
Ne |
find |
Ano |
findAndModify |
Ano |
getLastError |
Ano |
getMore |
Ano |
getPrevError |
Ne |
insert |
Ano |
parallelCollectionScan |
No |
resetError |
No |
update |
Ano |
Příkazy transakcí
Příkaz | Podporováno |
---|---|
abortTransaction |
Ano |
commitTransaction |
Yes |
Příkazy pro ověření
Příkaz | Podporováno |
---|---|
authenticate |
Ano |
getnonce |
Ano |
logout |
Yes |
Příkazy pro správu
Příkaz | Podporováno |
---|---|
cloneCollectionAsCapped |
No |
collMod |
No |
connectionStatus |
No |
convertToCapped |
No |
copydb |
No |
create |
Ano |
createIndexes |
Ano |
currentOp |
Ano |
drop |
Ano |
dropDatabase |
Ano |
dropIndexes |
Ano |
filemd5 |
Ano |
killCursors |
Ano |
killOp |
Ne |
listCollections |
Ano |
listDatabases |
Ano |
listIndexes |
Ano |
reIndex |
Ano |
renameCollection |
No |
Příkazy pro diagnostiku
Příkaz | Podporováno |
---|---|
buildInfo |
Ano |
collStats |
Ano |
connPoolStats |
No |
connectionStatus |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Ano |
explain |
Ano |
features |
Ne |
hostInfo |
Ano |
listDatabases |
Ano |
listCommands |
No |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Ano |
Agregační zřetězení
Příkazy pro agregaci
Příkaz | Podporováno |
---|---|
aggregate |
Ano |
count |
Ano |
distinct |
Ano |
mapReduce |
No |
Fáze agregace
Příkaz | Podporováno |
---|---|
addFields |
Yes |
bucket |
No |
bucketAuto |
No |
changeStream |
Ano |
collStats |
Ne |
count |
Ano |
currentOp |
Ne |
facet |
Ano |
geoNear |
Ano |
graphLookup |
Ano |
group |
Ano |
indexStats |
Ne |
limit |
Ano |
listLocalSessions |
No |
listSessions |
Ne |
lookup |
Částečná |
match |
Ano |
out |
Ano |
project |
Ano |
redact |
Ano |
replaceRoot |
Ano |
replaceWith |
Ne |
sample |
Ano |
skip |
Ano |
sort |
Ano |
sortByCount |
Ano |
unwind |
Ano |
Poznámka:
$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ěchdb.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.
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.
- Pokoušíte se naplánovat kapacitu migrace do služby Azure Cosmos DB? Informace o stávajícím databázovém clusteru můžete použít k plánování kapacity.
- Pokud víte, že je počet virtuálních jader a serverů ve vašem existujícím databázovém clusteru, přečtěte si informace o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické sazby požadavků pro vaši aktuální úlohu databáze, přečtěte si informace o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro