Azure Cosmos DB pro MongoDB (verze serveru 4.2): Podporované funkce a syntaxe

PLATÍ PRO: MongoDB

Azure Cosmos DB je globálně distribuovaná databázová služba Microsoftu pro více modelů. Azure Cosmos DB nabízí více databázových rozhraní API. S Azure Cosmos DB for MongoDB můžete komunikovat pomocí libovolného opensourcového klientského ovladače MongoDB. Azure Cosmos DB pro MongoDB podporuje použití existujících klientských ovladačů tím, že se řídí protokolem přenosu MongoDB.

S využitím služby Azure Cosmos DB pro MongoDB můžete využívat výhody MongoDB, se všemi podnikovými funkcemi, které azure Cosmos DB poskytuje: 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é v tomto článku. 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 pro MongoDB má verze účtů 3.6 nebo novější koncový bod ve formátu *.mongo.cosmos.azure.com. 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ě používají delete() příkazy a update() příkazy serveru. Funkce, které používají 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. V následujících částech 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í

Poznámka:

Transakce s více dokumenty jsou podporovány pouze v rámci jedné neshardované kolekce. Transakce více dokumentů napříč kolekcemi a více horizontálními oddíly se zatím v rozhraní API pro MongoDB nepodporují.

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í

Azure Cosmos DB pro MongoDB podporuje následující příkazy agregace.

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 Ne
group Ano
indexStats Ne
limit Ano
listLocalSessions No
listSessions Ne
lookup Částečná
match Ano
merge Ano
out Ano
planCacheStats Ano
project Ano
redact Ano
regexFind Ano
regexFindAll Ano
regexMatch Ano
replaceRoot Ano
replaceWith Ano
sample Ano
set Ano
skip Ano
sort Ano
sortByCount Ano
unset Ano
unwind Ano

Poznámka:

Agregace $lookup zatím nepodporuje funkci nesouvisejících poddotazů , která je zavedena na serveru verze 3.6. Pokud se pokusíte použít operátor s let poli a pipeline pole, zobrazí se chybová zpráva, která indikuje, že let není podporována.$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, které mají v dotazu literál pole.

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
round Ano
sqrt Ano
subtract Ano
trunc Yes

Trigonometrické výrazy

Příkaz Podporováno
acos Ano
acosh Ano
asin Ano
asinh Ano
atan Ano
atan2 Ano
atanh Ano
cos Ano
cosh Ano
degreesToRadians Ano
radiansToDegrees Ano
sin Ano
sinh Ano
tan Ano
tanh 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
$$CLUSTERTIME Ano
$$CURRENT Ano
$$DESCEND Ano
$$KEEP Ano
$$NOW 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 4.0 a novější (4.0+) vylepšují 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ší, z této optimalizace těží.

Ve scénáři upgradu nebudou dokumenty napsané před upgradem verze 4.0+ těžit z vyššího výkonu, dokud nebudou aktualizovány 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. Když se tato funkce pro váš databázový účet povolí, nedá se zakázat.

Pokud chcete povolit podporu dokumentů o velikosti 16 MB, změňte nastavení na kartě Funkce pro prostředek na webu Azure Portal nebo přidejte EnableMongo16MBDocumentSupport funkci prostřednictvím kódu programu.

Doporučujeme povolit opakování na straně serveru a vyhnout se použití indexů zástupných znaků, abyste zajistili úspěšné požadavky ve větších dokumentech. Zvýšení jednotek žádostí o databázi nebo kolekci může také pomoct s výkonem.

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

Azure Cosmos DB pro MongoDB podporuje následující příkazy indexu 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 Yes
Partial Podporováno pouze pro jedinečné indexy
Case Insensitive No
Sparse No
Background Ano

Operátory

Azure Cosmos DB pro MongoDB podporuje následující 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. Použijte $regex místo toho.)
where No

V $regex dotazech umožňují výrazy ukotvené doleva vyhledávání indexu. Použití modifikátoru i (rozlišování velkých a malých písmen) a m modifikátoru (víceřádkový) však způsobí, že se kolekce prohledá ve všech výrazech.

Pokud je potřeba zahrnout $ nebo |je nejlepší vytvořit dva (nebo více) $regex dotazů.

Změňte například následující původní dotaz:

find({x:{$regex: /^abc$/})

Do tohoto dotazu:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

První část upraveného dotazu používá index k omezení vyhledávání na dokumenty, které začínají ^abc. Druhá část dotazu odpovídá přesným položkám. Operátor pruhu (|) funguje jako "nebo". Dotaz find({x:{$regex: /^abc |^def/}) odpovídá dokumentům, ve kterých pole x obsahuje hodnoty začínající nebo abc def. Pokud chcete použít index, doporučujeme rozdělit dotaz na dva různé dotazy, které jsou 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 jsou podporovány operace řazení v jednom poli. Operace řazení na více polích se nepodporují.

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.

Šifrování na úrovni pole na straně klienta

Šifrování polí na úrovni klienta je funkce ovladače a je kompatibilní s rozhraním API pro MongoDB. Explicitní šifrování, ve kterém ovladač explicitně šifruje každé pole při zápisu, je podporováno. Automatické šifrování není podporováno. Podporuje se explicitní dešifrování a automatické dešifrování.

Nemělo mongocryptd by se spouštět, protože není potřeba provádět žádné z podporovaných operací.

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 se také rozšiřuje, aby se dosáhlo nízké latence, globální replikace. Azure Cosmos DB nepodporuje příkazy ruční replikace.

Opakovatelné zápisy

Funkce opakovaných zápisů umožňuje ovladačům MongoDB automaticky opakovat určité operace zápisu. Výsledkem této funkce jsou přísnější požadavky na určité operace, které odpovídají požadavkům protokolu MongoDB. Když je tato funkce povolená, operace aktualizace, včetně odstranění, v horizontálně dělených kolekcích vyžadují zahrnutí klíče horizontálního oddílu do filtru dotazu nebo příkazu update.

Například s horizontálně dělenou kolekcí, která je horizontálně dělena na "country" klíč, aby se odstranily všechny dokumenty s polem "city" = "NYC", musí aplikace provést operaci pro všechny hodnoty klíče horizontálního oddílu ("country"), pokud je povolená funkce opakovatelných zápisů.

  • 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 můžete povolit také na kartě Funkce na webu Azure Portal.

Sharding

Azure Cosmos DB podporuje automatický sharding na straně serveru. Automaticky spravuje vytváření, umístění a vyrovnávání horizontálních oddílů. Azure Cosmos DB nepodporuje ruční příkazy horizontálního dělení, což znamená, že nemusíte volat příkazy, jako je addShard, balancerStarta moveChunk. Klíč horizontálního oddílu je potřeba zadat pouze při vytváření kontejnerů nebo dotazování dat.

Přednášky

Azure Cosmos DB zatím nepodporuje příkazy relací na straně serveru.

Time to Live

Azure Cosmos DB podporuje hodnotu TTL (Time to Live), která je založená na časovém razítku dokumentu. Hodnotu TTL pro kolekci můžete povolit na webu Azure Portal.

Vlastní hodnota TTL

Tato funkce umožňuje nastavit vlastní hodnotu TTL u libovolného pole v kolekci.

V kolekci, která má pro pole povolenou hodnotu TTL:

  • Přijatelné typy jsou datový typ BSON a číselné typy (celé číslo, dlouhé nebo dvojité), které se interpretují jako časové razítko unixového milisekund k určení vypršení platnosti.

  • Pokud je pole TTL pole pole, je nejmenší prvek pole, který je přijatelného typu, považován za vypršení platnosti dokumentu.

  • Pokud v dokumentu chybí pole TTL, platnost dokumentu nevyprší.

  • Pokud pole TTL není přijatelným typem, dokument nevyprší.

Omezení vlastní hodnoty TTL

  • V kolekci může být nastavená hodnota TTL pouze jedno pole.

  • U vlastní sady \_ts polí TTL nelze toto pole použít k vypršení platnosti dokumentu.

  • Pole navíc nemůžete použít \_ts .

Konfigurace

Vlastní hodnotu TTL můžete povolit aktualizací EnableTtlOnCustomPath funkce účtu. Naučte se konfigurovat možnosti.

Nastavení hodnoty TTL

Pokud chcete nastavit hodnotu TTL, spusťte tento příkaz: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})

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 (na stránce Připojovací řetězce ).

Otázky týkající se zápisu

Některé aplikace spoléhají na problém se zápisem, který určuje počet odpovědí, které se vyžadují během operace zápisu. Vzhledem k tomu, jak Azure Cosmos DB zpracovává replikaci na pozadí, jsou ve výchozím nastavení všechny zápisy automaticky kvorum. Všechny obavy týkající se zápisu zadané kódem klienta se ignorují. Naučte se používat úrovně konzistence k maximalizaci dostupnosti a výkonu.

Další kroky