Veelvoorkomende problemen in Azure Cosmos DB API voor MongoDB oplossen
VAN TOEPASSING OP: MongoDB
In het volgende artikel worden veelvoorkomende fouten en oplossingen voor implementaties beschreven met behulp van Azure Cosmos DB voor MongoDB.
Notitie
Azure Cosmos DB host de MongoDB-engine niet. Het biedt een implementatie van de MongoDB wire protocol versie 4.0, 3.6 en verouderde ondersteuning voor wire protocol versie 3.2. Daarom worden sommige van deze fouten alleen gevonden in de API van Azure Cosmos DB voor MongoDB.
Veelvoorkomende fouten en oplossingen
Code | Fout | Beschrijving | Oplossing |
---|---|---|---|
2 | BadValue | Een veelvoorkomende oorzaak is dat een indexpad dat overeenkomt met het opgegeven order-by-item wordt uitgesloten of dat de volgorde per query geen bijbehorende samengestelde index bevat waaruit het kan worden geleverd. De query vraagt een sortering op voor een veld dat niet is geïndexeerd. | Maak een overeenkomende index (of samengestelde index) voor de sorteerquery die moet worden uitgevoerd. |
2 | Transactie is niet actief | De transactie met meerdere documenten heeft de vaste tijdslimiet van 5 seconden overschreden. | Voer de transactie met meerdere documenten opnieuw uit of beperk het bereik van bewerkingen binnen de transactie met meerdere documenten om deze binnen de tijdslimiet van vijf seconden te voltooien. |
9 | FailedToParse | Geeft aan dat de Cosmos DB-server een parameter niet kan interpreteren of verwerken omdat de opgegeven invoer niet voldoet aan de verwachte of ondersteunde indeling. | Zorg ervoor dat alleen geldige en ondersteunde parameters zijn opgenomen in uw query's. |
13 | Niet geautoriseerd | De aanvraag heeft geen machtigingen waarmee dit kan worden voltooid. | Zorg ervoor dat u de juiste sleutels gebruikt. |
26 | NamespaceNotFound | De database of verzameling waarnaar in de query wordt verwezen, kan niet worden gevonden. | Zorg ervoor dat de naam van uw database/verzameling precies overeenkomt met de naam in uw query. |
50 | ExceededTimeLimit | De aanvraag heeft de time-out van 60 seconden uitvoeringstijd overschreden. | Deze fout kan meerdere oorzaken hebben. Een van de oorzaken is wanneer de capaciteit van de momenteel toegewezen aanvraageenheden niet voldoende is om de aanvraag te voltooien. Dit kan worden opgelost door het aantal aanvraageenheden van die verzameling of database te vergroten. In andere gevallen kan deze fout worden omzeild door een grote aanvraag op te delen in kleinere. Als u een schrijfbewerking opnieuw probeert uit te voeren die deze fout heeft ontvangen, kan dit leiden tot een dubbele schrijfbewerking. Als u grote hoeveelheden gegevens probeert te verwijderen zonder dat dit van invloed is op RU's: - Overweeg het gebruik van TTL (op basis van tijdstempel): Gegevens automatisch laten verlopen met de Azure Cosmos DB-API voor MongoDB - Gebruik de cursor-/batchgrootte om de verwijdering uit te voeren. U kunt één document tegelijk ophalen en dit document verwijderen via een lus. Zo kunt u langzaam gegevens verwijderen zonder dat dit van invloed is op de productietoepassing. |
61 | ShardKeyNotFound | Het document in uw aanvraag bevat de shardsleutel van de verzameling niet (Azure Cosmos DB-partitiesleutel). | Zorg ervoor dat de shardsleutel van de verzameling in de aanvraag wordt gebruikt. |
66 | ImmutableField | Met de aanvraag wordt geprobeerd een onveranderbaar veld te wijzigen | "_id" velden zijn onveranderbaar. Zorg ervoor dat uw aanvraag niet probeert dat veld of het shardsleutelveld bij te werken. |
67 | CannotCreateIndex | De aanvraag voor het maken van een index kan niet worden voltooid. | Er kunnen maximaal 500 enkelvoudige veldindexen in een container worden gemaakt. Er kunnen maximaal acht velden worden opgenomen in een samengestelde index (samengestelde indexen worden ondersteund in versie 3.6+). |
112 | WriteConflict | De transactie met meerdere documenten is mislukt vanwege een conflicterende transactie met meerdere documenten | Probeer de transactie met meerdere documenten opnieuw totdat deze lukt. |
115 | CommandNotSupported | De aanvraag wordt niet ondersteund. | Andere gegevens moeten worden opgegeven in de fout. Als deze functionaliteit belangrijk is voor uw implementaties, maakt u een ondersteuningsticket in Azure Portal en komt het Azure Cosmos DB-team terug naar u toe. |
11000 | DuplicateKey | De shardsleutel (Azure Cosmos DB-partitiesleutel) van het document dat u invoegt, bevindt zich al in de verzameling of er wordt een unieke indexveldbeperking geschonden. | Gebruik de functie update() om een bestaand document bij te werken. Als de unieke indexveldbeperking is geschonden, voegt u het document in of werkt u het bij met een veldwaarde die nog niet bestaat in de shard/partitie. Een andere optie is het gebruik van een veld met een combinatie van de id- en shardsleutelvelden. |
16500 | TooManyRequests | Het totale aantal verbruikte aanvraageenheden is groter dan de ingerichte aanvraageenheidsnelheid voor de verzameling en is beperkt. | Overweeg de aan een container of een set containers toegewezen doorvoer te schalen vanuit de Azure-portal, of probeer de bewerking opnieuw uit te voeren. Als u SSR inschakelt (opnieuw proberen aan de serverzijde), probeert Azure Cosmos DB automatisch opnieuw de aanvragen die mislukken vanwege deze fout. |
16501 | ExceededMemoryLimit | Voor een service met meerdere tenants betekent dit dat de bewerking de geheugentoewijzing van de client heeft overschreden. Dit is alleen van toepassing op Azure Cosmos DB voor MongoDB versie 3.2. | Verklein het bereik van de bewerking via meer beperkende querycriteria of neem contact op met de ondersteuning via Azure Portal. Voorbeeld: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}])) |
40324 | De naam van de pijplijnfase wordt niet herkend. | De naam van de fase in de aanvraag van uw aggregatiepijplijn wordt niet herkend. | Zorg ervoor dat alle namen van aggregatiepijplijnen geldig zijn in uw aanvraag. |
- | Problemen met wire-versies van MongoDB | De oudere versies van MongoDB-stuurprogramma's kunnen de naam van het Azure Cosmos DB-account niet detecteren in de verbindingsreeksen. | Voeg appName=@accountName@ aan het einde van uw verbindingsreeks toe, waar accountName is de naam van uw Azure Cosmos DB-account. |
- | Problemen met het MongoDB-clientnetwerk (zoals socket- of endOfStream-uitzonderingen) | De netwerkaanvraag is mislukt. Dit wordt vaak veroorzaakt door een inactieve TCP-verbinding die de MongoDB-client wil gebruiken. MongoDB-stuurprogramma's gebruiken vaak groepsgewijze verbindingen, wat ertoe leidt dat er een willekeurige verbinding uit de groep voor een aanvraag wordt gekozen. Aan de Azure Cosmos DB-zijde vindt er voor inactieve verbindingen na vier minuten gewoonlijk een time-out plaats. | U kunt deze mislukte aanvragen in uw toepassingscode opnieuw proberen, uw MongoDB-clientinstellingen (stuurprogramma) wijzigen om inactieve TCP-verbindingen open te breken vóór de time-out van vier minuten of de keepalive -instellingen voor het besturingsprogramma configureren om de TCP-verbindingen in een actieve status te houden.U kunt de verbindingsreeks wijzigen en maxConnectionIdleTime instellen op 1-2 minuten om berichten over de verbinding te voorkomen.- Mongo-stuurprogramma: configureer maxIdleTimeMS=120000 - Node.JS: configureer socketTimeoutMS=120000 , autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minuten |
- | De Mongo-shell werkt niet in Azure Portal | Wanneer een gebruiker een Mongo-shell wil openen, gebeurt er niets en blijft het tabblad leeg. | Controleer de firewall. De firewall wordt niet ondersteund met de Mongo-shell in Azure Portal. - Mongo-shell installeren op de lokale computer binnen de firewallregels - gebruik verouderde Mongo-shell |
- | Kan geen verbinding maken met verbindingsreeks | De verbindingsreeks is gewijzigd bij het upgraden van 3.2 -> 3.6 | Wanneer u de API van Azure Cosmos DB voor MongoDB-accounts gebruikt, heeft de 3.6-versie van accounts het eindpunt in de indeling *.mongo.cosmos.azure.com , terwijl de 3.2-versie van accounts het eindpunt in de indeling *.documents.azure.com heeft. |
Volgende stappen
- Meer informatie over het gebruik van Studio 3T met de API voor MongoDB van Azure Cosmos DB.
- Meer informatie over het gebruik van Robo 3T met de API voor MongoDB van Azure Cosmos DB.
- Verken voorbeelden van MongoDB met de API voor MongoDB van Azure Cosmos DB.