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ě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 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
, balancerStart
a 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
- 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 o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.