Řešení běžných potíží v rozhraní API služby Azure Cosmos DB pro MongoDB

PLATÍ PRO: MongoDB

Následující článek popisuje běžné chyby a řešení pro nasazení pomocí služby Azure Cosmos DB pro MongoDB.

Poznámka:

Azure Cosmos DB nehostuje modul MongoDB. Poskytuje implementaci přenosového protokolu MongoDB verze 4.0, 3.6 a starší verze podpory přenosového protokolu verze 3.2. Některé z těchto chyb se proto nacházejí pouze v rozhraní API služby Azure Cosmos DB pro MongoDB.

Běžné chyby a řešení

Kód Chyba Popis Řešení
2 BadValue Jednou zběžnýchch Dotaz požaduje řazení podle pole, které není indexované. Vytvořte pro dotaz řazení, který se pokoušíte provést, odpovídající index (nebo složený index).
2 Transakce není aktivní Transakce s více dokumenty překročila pevný 5sekundový časový limit. Zopakujte transakci s více dokumenty nebo omezte rozsah operací v rámci transakce s více dokumenty, aby se mohla dokončit během časového limitu 5 sekund.
9 FailedToParse Označuje, že server Cosmos DB nemohl interpretovat nebo zpracovávat parametr, protože zadaný vstup neodpovídá očekávanému nebo podporovanému formátu. Ujistěte se, že vaše dotazy zahrnují jenom platné a podporované parametry.
13 Neautorizováno Požadavek nemá oprávnění potřebná k dokončení. Ujistěte se, že používáte správné klíče.
26 NamespaceNotFound Nepodařilo se najít databázi nebo kolekci, na kterou se odkazuje v dotazu. Ujistěte se, že název vaší databáze nebo kolekce přesně odpovídá názvu ve vašem dotazu.
50 ExceededTimeLimit Požadavek překročil 60sekundový časový limit provádění. Tato chyba může mít celou řadu příčin. Jednou z příčin je, že aktuálně přidělená kapacita jednotek žádostí nestačí k dokončení požadavku. Tento problém je možné vyřešit zvýšením počtu jednotek žádostí dané kolekce nebo databáze. V ostatních případech je možné tuto chybu obejít rozdělením velkého požadavku na menší požadavky. Zopakováním operace zápisu, u které došlo k této chybě, může dojít k duplicitnímu zápisu.

Pokud se pokoušíte odstranit velké objemy dat bez dopadu na RU:
Zvažte použití hodnoty TTL (na základě časového razítka): Vypršení platnosti dat s využitím rozhraní API služby Azure Cosmos DB pro MongoDB.
Použijte k odstranění kurzor a velikost dávky. S využitím smyčky můžete postupně načíst jednotlivé dokumenty a odstranit je. Tímto způsobem můžete pomalu provést odstranění dat, aniž by to mělo vliv na produkční aplikaci.
61 ShardKeyNotFound Dokument ve vašem požadavku neobsahoval klíč horizontálního dělení kolekce (klíč oddílu Azure Cosmos DB). Zajistěte, aby se v požadavku používal klíč horizontálního dělení kolekce.
66 ImmutableField Požadavek se pokouší změnit neměnné pole. Pole _id jsou neměnná. Ujistěte se, že se vaše žádost nepokouší aktualizovat toto pole nebo pole klíče horizontálního dělení.
67 CannotCreateIndex Požadavek na vytvoření indexu není možné dokončit. V rámci kontejneru je možné vytvořit až 500 indexů jednotlivých polí. Složený index může obsahovat až 8 polí (složené indexy se podporují ve verzi 3.6 nebo novější).
112 WriteConflict Transakce s více dokumenty selhala kvůli konfliktní transakci s více dokumenty. Opakujte transakci s více dokumenty, dokud se úspěšně nedokončí.
115 CommandNotSupported Požadavek, který se pokoušíte provést, se nepodporuje. V chybě by měly být uvedeny další podrobnosti. Pokud je tato funkce pro vaše nasazení důležitá, vytvořte lístek podpory na webu Azure Portal a tým služby Azure Cosmos DB se k vám vrátí.
11000 DuplicateKey Klíč horizontálního dělení (klíč oddílu Azure Cosmos DB) dokumentu, který vkládáte, již v kolekci existuje, nebo došlo k porušení omezení pro pole jedinečného indexu. Pomocí funkce update() aktualizujte existující dokument. Pokud došlo k porušení omezení pole jedinečného indexu, vložte nebo aktualizujte dokument hodnotou pole, která ještě v horizontálním oddílu nebo oddílu neexistuje. Další možností je použít pole obsahující kombinaci polí ID a klíče horizontálního dělení.
16500 TooManyRequests Celkový počet spotřebovaných jednotek žádostí je vyšší než zřízený počet jednotek žádostí pro kolekci, a proto došlo k omezení. Zvažte škálování propustnosti přiřazené kontejneru nebo sadě kontejnerů na webu Azure Portal, případně můžete zkusit operaci zopakovat. Pokud povolíte opakování na straně serveru, Azure Cosmos DB automaticky opakuje požadavky, které kvůli této chybě selžou.
16501 ExceededMemoryLimit Vzhledem k tomu, že se jedná o víceklientskou službu, znamená to, že operace překročila příděl paměti klienta. To platí jenom pro Azure Cosmos DB pro MongoDB verze 3.2. Omezte rozsah operace použitím přísnějších kritérií dotazu nebo kontaktujte podporu na webu Azure Portal. Příklad: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Nerozpoznaný název fáze kanálu. Název fáze v požadavku vašeho kanálu agregace se nerozpoznal. Zajistěte, aby všechny názvy v kanálu agregace ve vašem požadavku byly platné.
- Problémy s verzí přenosového protokolu MongoDB Starší verze ovladačů MongoDB nedokáží v připojovacích řetězcích rozpoznat název účtu služby Azure Cosmos DB. Připojte appName=@accountName@ na konec připojovací řetězec, kde accountName je název vašeho účtu služby Azure Cosmos DB.
- Problémy se sítěmi klienta MongoDB (například se sokety nebo výjimkami endOfStream) Síťový požadavek selhal. Příčinou je často neaktivní připojení TCP, které se klient MongoDB pokouší použít. Ovladače MongoDB často využívají sdružování připojení, a pro požadavky se proto používají náhodná připojení z fondu. K vypršení časového limitu neaktivních připojení na straně služby Azure Cosmos DB obvykle dochází po 4 minutách. V kódu vaší aplikace můžete tyto neúspěšné požadavky opakovat, můžete změnit nastavení klienta (ovladače) MongoDB tak, aby ukončoval neaktivní připojení TCP před uplynutím časového limitu 4 minut, nebo můžete nakonfigurovat nastavení keepalive vašeho operačního systému tak, aby se připojení TCP udržovala v aktivním stavu.

Pokud chcete zprávám o připojení zabránit, můžete změnit připojovací řetězec a nastavit hodnotu maxConnectionIdleTime na 1 nebo 2 minuty.
Ovladač Mongo: nakonfigurujte maxIdleTimeMS=120000.
Node.js: nakonfigurujte socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minuty.
- Na webu Azure Portal nefunguje prostředí Mongo Shell Když se uživatel pokusí otevřít prostředí Mongo Shell, nic se nestane a karta zůstane prázdná. Zkontrolujte bránu firewall. Prostředí Mongo Shell na webu Azure Portal nepodporuje bránu firewall.
– Instalace prostředí Mongo shell na místní počítač v rámci pravidel brány firewall
Použijte starší verzi prostředí Mongo Shell.
- Pomocí připojovacího řetězce se nejde připojit Při upgradu z verze 3.2 –> 3.6 došlo ke změně připojovací řetězec Při použití účtů rozhraní API služby Azure Cosmos DB pro MongoDB má verze účtů 3.6 koncový bod ve formátu *.mongo.cosmos.azure.com , zatímco verze účtů 3.2 má koncový bod ve formátu *.documents.azure.com.

Další kroky

  • Zjistěte, jak používat Studio 3T s rozhraním API služby Azure Cosmos DB pro MongoDB.
  • Naučte se používat Robo 3T s rozhraním API služby Azure Cosmos DB pro MongoDB.
  • Prozkoumejte ukázky MongoDB pomocí rozhraní API služby Azure Cosmos DB pro MongoDB.