Behandeln häufiger Probleme in der Azure Cosmos DB-API für MongoDB

GILT FÜR: MongoDB

Im folgenden Artikel werden häufige Fehler und Lösungen für Bereitstellungen beschrieben, die Azure Cosmos DB for MongoDB verwenden.

Hinweis

Azure Cosmos DB hostet nicht die MongoDB-Engine. Der Dienst bietet eine Implementierung der Wire Protocol-Versionen 4.0 und 3.6 von MongoDB sowie Legacy-Unterstützung für die Wire Protocol-Version 3.2. Daher finden sich einige dieser Fehler nur in der Azure Cosmos DB-API für MongoDB.

Häufige Fehler und Lösungen

Code Fehler BESCHREIBUNG Lösung
2 BadValue Ein häufiger Grund ist, dass ein Indexpfad zum angegebenen ORDER BY-Element ausgeschlossen ist. Es kann auch sein, dass die ORDER BY-Abfrage keinen entsprechenden zusammengesetzten Index für die Bereitstellung hat. Die Abfrage fordert eine Sortierung für ein Feld an, das nicht indiziert wurde. Erstellen Sie einen übereinstimmenden Index (oder zusammengesetzten Index) für die durchzuführende Sortierabfrage.
2 Transaktion ist nicht aktiv Bei der Transaktion mit mehreren Dokumenten wurde das feste Zeitlimit von fünf Sekunden überschritten. Wiederholen Sie die Transaktion mit mehreren Dokumenten, oder schränken Sie den Umfang von Vorgängen innerhalb der Transaktion mit mehreren Dokumenten ein, damit sie innerhalb des Zeitlimits von fünf Sekunden abgeschlossen wird.
13 Nicht autorisiert Der Anforderung fehlen die Berechtigungen für die vollständige Ausführung. Stellen Sie sicher, dass Sie die richtigen Schlüssel verwenden.
26 NamespaceNotFound Die Datenbank oder Sammlung, auf die in der Abfrage verwiesen wird, kann nicht gefunden werden. Stellen Sie sicher, dass der Name Ihrer Datenbank bzw. Sammlung exakt dem Namen in Ihrer Abfrage entspricht.
50 ExceededTimeLimit Die Anforderung hat das Ausführungstimeout von 60 Sekunden überschritten. Dieser Fehler kann vielfältige Ursachen haben. Eine dieser Ursachen kann sein, dass die Kapazität der zurzeit zugeordneten Anforderungseinheiten nicht ausreicht, um die Anforderung abzuschließen. Dieses Problem kann durch Erhöhen der Anforderungseinheiten dieser Sammlung oder Datenbank behoben werden. In anderen Fällen kann dieser Fehler umgangen werden, indem eine große Anforderung in kleinere Anforderungen aufgeteilt wird. Das Wiederholen eines Schreibvorgangs, bei dem dieser Fehler aufgetreten ist, kann zu einem doppelten Schreibvorgang führen.

Gehen Sie wie folgt vor, wenn Sie große Datenmengen löschen möchten, ohne dass sich dies auf RUs auswirkt:
- Erwägen Sie die Verwendung einer Gültigkeitsdauer (basierend auf dem Zeitstempel): Ablauf von Daten mit der Azure Cosmos DB-API für MongoDB
- Verwenden Sie Cursor-/Batchgröße, um den Löschvorgang durchzuführen. Sie können jeweils ein Dokument abrufen und per Schleife löschen. Dies ermöglicht das langsame Löschen von Daten ohne Beeinträchtigung Ihrer Produktionsanwendung.
61 ShardKeyNotFound Das Dokument in Ihrer Anforderung enthielt nicht den Shardschlüssel (Azure Cosmos DB-Partitionsschlüssel) der Sammlung. Stellen Sie sicher, dass in der Anforderung der Shardschlüssel der Sammlung verwendet wird.
66 ImmutableField Die Anforderung versucht, ein unveränderliches Feld zu ändern. Felder vom Typ „_id“ sind unveränderlich. Stellen Sie sicher, dass Ihre Anforderung nicht versucht, dieses Feld oder das Feld für den Shardschlüssel zu aktualisieren.
67 CannotCreateIndex Die Anforderung zum Erstellen eines Index kann nicht abgeschlossen werden. In einem Container können bis zu 500 Einzelfeldindizes erstellt werden. Ein zusammengesetzter Index kann bis zu acht Felder enthalten (zusammengesetzte Indizes werden in Version 3.6 und höher unterstützt).
112 WriteConflict Die Transaktion mit mehreren Dokumenten war aufgrund eines Konflikts mit einer anderen Transaktion mit mehreren Dokumenten nicht erfolgreich. Wiederholen Sie die Transaktion mit mehreren Dokumenten, bis sie erfolgreich ist.
115 CommandNotSupported Die versuchte Anforderung wird nicht unterstützt. In der Fehlermeldung sollten weitere Details angegeben sein. Wenn diese Funktion für Ihre Bereitstellungen wichtig ist, erstellen Sie im Azure-Portal ein Supportticket. Das Azure Cosmos DB-Team setzt sich dann mit Ihnen in Verbindung.
11000 DuplicateKey Der Shardschlüssel (Azure Cosmos DB-Partitionsschlüssel) des einzufügenden Dokuments ist in der Sammlung bereits vorhanden, oder eine Einschränkung in Bezug auf eindeutige Indexfelder wurde verletzt. Verwenden Sie die update()-Funktion, um ein vorhandenes Dokument zu aktualisieren. Wenn die Einschränkung in Bezug auf eindeutige Indexfelder verletzt wurde, fügen Sie einen Feldwert, der im Shardschlüssel bzw. in der Partition noch nicht vorhanden ist, in das Dokument ein, oder aktualisieren Sie es mit einem entsprechenden Feldwert. Eine weitere Möglichkeit ist die Verwendung eines Felds mit einer Kombination aus den Feldern für die ID und den Shardschlüssel.
16500 TooManyRequests Die Gesamtanzahl der verbrauchten Anforderungseinheiten hat die bereitgestellte Anforderungseinheitenrate für die Sammlung überschritten und wurde gedrosselt. Skalieren Sie über das Azure-Portal ggf. den Durchsatz, der einem Container oder einer Gruppe von Containern zugewiesen ist, oder wiederholen Sie den Vorgang. Wenn Sie SSR (Server-Side Retry, serverseitige Wiederholung) aktivieren, versucht Azure Cosmos DB automatisch, die Anforderungen zu wiederholen, die aufgrund dieses Fehlers nicht ausgeführt werden konnten.
16501 ExceededMemoryLimit Der Vorgang ist ein mehrinstanzenfähiger Dienst und hat die Speicherzuweisung des Clients überschritten. Dies gilt nur für Azure Cosmos DB for MongoDB, Version 3.2. Verringern Sie den Umfang des Vorgangs mithilfe restriktiverer Abfragekriterien, oder wenden Sie sich im Azure-Portal an den Support. Beispiel: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Nicht erkannter Name einer Pipelinestage Der Stagename in der Anforderung Ihrer Aggregationspipeline wurde nicht erkannt. Stellen Sie sicher, dass alle Aggregationspipelinenamen in Ihrer Anforderung gültig sind.
- Probleme mit der MongoDB-Wire-Version Die älteren Versionen von MongoDB-Treibern können den Namen des Azure Cosmos DB-Kontos in den Verbindungszeichenfolgen nicht erkennen. Fügen Sie am Ende Ihrer Verbindungszeichenfolge appName=@accountName@ an. accountName ist dabei der Name Ihres Azure Cosmos DB-Kontos.
- Netzwerkprobleme beim MongoDB-Client (beispielsweise Socket- oder endOfStream-Ausnahmen) Bei der Netzwerkanforderung ist ein Fehler aufgetreten. Dies wird häufig dadurch verursacht, dass der MongoDB-Client versucht, eine inaktive TCP-Verbindung zu verwenden. MongoDB-Treiber nutzen häufig Verbindungspools, was dazu führt, dass für Anforderungen zufällige Verbindungen aus dem Pool ausgewählt werden. Bei inaktiven Verbindungen tritt im Azure Cosmos DB-Endpunkt in der Regel nach vier Minuten ein Timeout auf. Sie können diese fehlerhaften Anforderungen über den Anwendungscode wiederholen, die Treibereinstellungen Ihres MongoDB-Clients so ändern, dass inaktive TCP-Verbindungen vor Ablauf des vierminütigen Timeoutfensters abgebrochen werden, oder die keepalive-Einstellungen des Betriebssystems so konfigurieren, dass TCP-Verbindungen im aktiven Status beibehalten werden.

Zur Vermeidung von Konnektivitätsmeldungen kann es ratsam sein, die Verbindungszeichenfolge zu ändern und maxConnectionIdleTime auf 1 - 2 Minuten festzulegen.
- Mongo-Treiber: Konfigurieren Sie Folgendes: maxIdleTimeMS=120000
- Node.js: Konfigurieren Sie Folgendes: socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minutes
- Mongo-Shell funktioniert im Azure-Portal nicht Wenn der Benutzer versucht, eine Mongo-Shell zu öffnen, passiert nichts, und die Registerkarte bleibt leer. Überprüfen Sie die Firewall. Die Firewall wird bei der Mongo-Shell im Azure-Portal nicht unterstützt.
- Installieren Sie die Mongo-Shell auf dem lokalen Computer innerhalb der Firewallregeln.
- Verwenden Sie eine Legacy-Mongo-Shell.
- Verbindung kann mit Verbindungszeichenfolge nicht hergestellt werden Beim Upgrade von 3.2 auf 3.6 hat sich die Verbindungszeichenfolge geändert Bei Verwendung der Azure Cosmos DB-API für MongoDB-Konten hat der Endpunkt bei der Kontoversion 3.6 und höher das Format *.mongo.cosmos.azure.com, während er bei der Kontoversion 3.2 das Format *.documents.azure.com hat.

Nächste Schritte

  • Erfahren Sie, wie Sie Studio 3T mit der API für MongoDB von Azure Cosmos DB verwenden.
  • Erfahren Sie, wie Sie Robo 3T mit der API für MongoDB von Azure Cosmos DB verwenden.
  • Untersuchen Sie MongoDB-Beispiele mit der API für MongoDB von Azure Cosmos DB.