Rozwiązywanie typowych problemów w interfejsie API usługi Azure Cosmos DB dla bazy danych MongoDB
DOTYCZY: MongoDB
W poniższym artykule opisano typowe błędy i rozwiązania dla wdrożeń przy użyciu usługi Azure Cosmos DB dla bazy danych MongoDB.
Uwaga
Usługa Azure Cosmos DB nie obsługuje aparatu bazy danych MongoDB. Zapewnia implementację protokołu przewodowego MongoDB w wersji 4.0, 3.6 i starszej obsługi protokołu przewodowego w wersji 3.2. W związku z tym niektóre z tych błędów można znaleźć tylko w interfejsie API usługi Azure Cosmos DB dla bazy danych MongoDB.
Typowe błędy i rozwiązania
Kod | Błąd | Opis | Rozwiązanie |
---|---|---|---|
2 | BadValue | Jedną z typowych przyczyn jest to, że ścieżka indeksu odpowiadająca określonemu elemencie order-by jest wykluczona lub zapytanie order by nie ma odpowiedniego indeksu złożonego, z którego można go obsłużyć. Zapytanie żąda sortowania w polu, które nie jest indeksowane. | Utwórz indeks (lub indeks złożony) pasujący do zapytania sortowania, które próbujesz utworzyć. |
2 | Transakcja nie jest aktywna | Transakcja obejmująca wiele dokumentów przekroczyła stały 5-sekundowy limit czasu. | Spróbuj ponownie wykonać transakcję obejmującą wiele dokumentów lub ogranicz zakres operacji w transakcji obejmującej wiele dokumentów, aby ukończyć ją w ciągu 5 sekund. |
9 | FailedToParse | Wskazuje, że serwer usługi Cosmos DB nie może interpretować ani przetwarzać parametru, ponieważ podane dane wejściowe nie były zgodne z oczekiwanym lub obsługiwanym formatem. | Upewnij się, że w zapytaniach znajdują się tylko prawidłowe i obsługiwane parametry. |
13 | Brak autoryzacji | Żądanie nie ma uprawnień do ukończenia. | Upewnij się, że używasz prawidłowych kluczy. |
26 | NamespaceNotFound | Nie można odnaleźć bazy danych lub kolekcji, do której odwołuje się zapytanie. | Upewnij się, że nazwa bazy danych/kolekcji dokładnie pasuje do nazwy w zapytaniu. |
50 | ExceededTimeLimit | Żądanie przekroczyło limit czasu wykonywania wynoszący 60 sekund. | Może istnieć wiele przyczyn tego błędu. Jedną z przyczyn jest to, że obecnie przydzielona pojemność jednostek żądania nie jest wystarczająca do ukończenia żądania. Ten problem można rozwiązać przez zwiększenie liczby jednostek żądania dla tej kolekcji lub bazy danych. W innych przypadkach ten błąd można obejść, dzieląc duże żądanie na mniejsze. Ponowienie próby wykonania operacji zapisu, w której wystąpił ten błąd, może spowodować powstanie duplikatu zapisu. Jeśli próbujesz usunąć duże ilości danych bez wpływu na jednostki RU: — Rozważ użycie czasu wygaśnięcia (na podstawie sygnatury czasowej): Wygasanie danych za pomocą interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB — Użyj rozmiaru kursora/partii, aby wykonać operację usuwania. Możesz pobierać jeden dokument na raz i usuwać go w pętli. Umożliwi to powolne wykonanie usunięcia danych bez wpływu na aplikację produkcyjną. |
61 | ShardKeyNotFound | Dokument w żądaniu nie zawiera klucza partycjonującego kolekcji (klucza partycji usługi Azure Cosmos DB). | Upewnij się, że klucz partycjonujący kolekcji jest używany w danym żądaniu. |
66 | ImmutableField | Żądanie próbuje zmienić niezmienne pole | Pola "_id" są niezmienne. Upewnij się, że żądanie nie próbuje zaktualizować tego pola ani pola klucza fragmentu. |
67 | CannotCreateIndex | Nie można ukończyć żądania utworzenia indeksu. | W kontenerze można utworzyć maksymalnie 500 indeksów pojedynczego pola. W indeksie złożonym można uwzględnić maksymalnie osiem pól (indeksy złożone są obsługiwane w wersji 3.6+). |
112 | WriteConflict | Transakcja obejmująca wiele dokumentami nie powiodła się z powodu konfliktu transakcji obejmującej wiele dokumentów | Spróbuj ponownie wykonać transakcję obejmującą wiele dokumentów, dopóki się nie powiedzie. |
115 | CommandNotSupported | Podjęte żądanie nie jest obsługiwane. | Inne szczegóły powinny być podane w błędzie. Jeśli ta funkcja jest ważna dla wdrożeń, utwórz bilet pomocy technicznej w witrynie Azure Portal, a zespół usługi Azure Cosmos DB wróci do Ciebie. |
11000 | DuplicateKey | Klucz partycjonujący (klucz partycji usługi Azure Cosmos DB) wstawianego dokumentu już istnieje w kolekcji lub naruszono ograniczenie pola indeksu unikatowego. | Użyj funkcji update(), aby zaktualizować istniejący dokument. Jeśli ograniczenie pola indeksu unikatowego zostało naruszone, wstaw lub zaktualizuj dokument wartością pola, która jeszcze nie istnieje w partycji/fragmentu. Inną opcją jest użycie pola zawierającego kombinację pól identyfikatora i klucza fragmentu. |
16500 | TooManyRequests | Łączna liczba użytych jednostek żądania jest większa niż aprowizowana prędkość jednostek żądania dla tej kolekcji i zostało zastosowane ograniczanie. | Rozważ skalowanie przepływności przypisanej do kontenera lub zestawu kontenerów w witrynie Azure Portal albo spróbuj wykonać operację ponownie. Jeśli włączysz funkcję SSR (ponawianie po stronie serwera), usługa Azure Cosmos DB automatycznie ponawia próby żądań, które kończą się niepowodzeniem z powodu tego błędu. |
16501 | ExceededMemoryLimit | W przypadku usługi wielodostępnej operacja przekroczyła przydział pamięci klienta. Dotyczy to tylko usługi Azure Cosmos DB dla bazy danych MongoDB w wersji 3.2. | Zmniejsz zakres operacji, stosując bardziej restrykcyjne kryteria zapytania, lub skontaktuj się z pomocą techniczną w witrynie Azure Portal. Przykład: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}])) |
40324 | Nierozpoznana nazwa etapu potoku. | Nie rozpoznano nazwy etapu w żądaniu potoku agregacji. | Upewnij się, że wszystkie nazwy potoków agregacji w żądaniu są prawidłowe. |
- | Problemy dotyczące wersji protokołu Wire bazy danych MongoDB | Starsze wersje sterowników bazy danych MongoDB nie są w stanie wykryć nazwy konta usługi Azure Cosmos DB w parametrach połączenia. | Dołącz appName=@accountName@ na końcu parametry połączenia, gdzie accountName jest nazwą konta usługi Azure Cosmos DB. |
- | Problemy dotyczące sieci klienta bazy danych MongoDB (takie jak wyjątki socket lub endOfStream) | Żądanie sieci zakończyło się niepowodzeniem. Jest to często powodowane nieaktywnym połączeniem TCP, którego próbuje użyć klient bazy danych MongoDB. Sterowniki bazy danych MongoDB często wykorzystują buforowanie połączeń, czego wynikiem jest losowe połączenie wybrane z puli używanej dla żądania. Nieaktywne połączenia zwykle kończą się przekroczeniem limitu czasu w usłudze Azure Cosmos DB po upływie czterech minut. | Można ponowić próbę wykonania tych nieudanych żądań w kodzie aplikacji, zmienić ustawienia klienta bazy danych MongoDB (sterownik) tak, aby usunąć nieaktywne połączenia TCP przed 4-minutowym oknem limitu czasu, lub skonfigurować ustawienia keepalive systemu operacyjnego w celu utrzymania połączeń TCP w stanie aktywnym.Aby uniknąć komunikatów o łączności, można zmienić parametry połączenia, ustawiając parametr maxConnectionIdleTime na wartość 1-2 minuty.— Sterownik Mongo: skonfiguruj maxIdleTimeMS=120000 — Sterownik Node. JS: skonfiguruj socketTimeoutMS=120000 , autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 min |
- | Powłoka Mongo nie działa w witrynie Azure Portal | Gdy użytkownik próbuje otworzyć powłokę Mongo, nic się nie dzieje, a karta pozostaje pusta. | Sprawdź ustawienia zapory. Usługa Firewall nie jest obsługiwana przez powłokę Mongo w witrynie Azure Portal. - Zainstaluj powłokę Mongo na komputerze lokalnym w regułach zapory — Użyj starszej powłoki Mongo |
- | Nie można nawiązać połączenia z parametrami połączenia | Parametry połączenia uległ zmianie podczas uaktualniania z wersji 3.2 –> 3.6 | W przypadku korzystania z interfejsu API usługi Azure Cosmos DB dla kont bazy danych MongoDB wersja 3.6 kont ma punkt końcowy w formacie *.mongo.cosmos.azure.com , natomiast w wersji 3.2 konta mają punkt końcowy w formacie *.documents.azure.com . |
Następne kroki
- Dowiedz się, jak korzystać z programu Studio 3T za pomocą interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.
- Dowiedz się, jak korzystać z programu Robo 3T za pomocą interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.
- Eksploruj przykłady bazy danych MongoDB za pomocą interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.