MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

pymongo.errors.CursorNotFound:identyfikator kursora '...' niepoprawny na serwerze

Otrzymujesz ten błąd, ponieważ limit czasu kursora na serwerze (po 10 minutach braku aktywności).

Z dokumentacji pymongo:

Kursory w MongoDB mogą przekroczyć limit czasu na serwerze, jeśli były otwarte przez długi czas bez wykonywania na nich żadnych operacji. Może to prowadzić do podniesienia wyjątku CursorNotFound podczas próby iteracji kursora.

Kiedy wywołasz collection.find Metoda wysyła zapytanie do kolekcji i zwraca kursor do dokumentów. Aby pobrać dokumenty, musisz iterować kursorem. Kiedy iterujesz nad kursorem, sterownik faktycznie wysyła żądania do serwera MongoDB, aby pobrać więcej danych z serwera. Ilość danych zwracanych w każdym żądaniu jest ustawiana przez batch_size() metoda.

Z dokumentacji:

Ogranicza liczbę dokumentów zwracanych w jednej partii. Każda partia wymaga podróży w obie strony do serwera. Można go dostosować w celu optymalizacji wydajności i ograniczenia przesyłania danych.

Ustawienie parametru batch_size na niższą wartość pomoże Ci z błędami przekroczenia limitu czasu, ale zwiększy liczbę uzyskiwania dostępu do serwera MongoDB w celu uzyskania wszystkich dokumentów.

Domyślny rozmiar partii:

W przypadku większości zapytań pierwsza partia zwraca 101 dokumentów lub tylko tyle dokumentów, aby przekroczyć 1 megabajt. Rozmiar wsadu nie przekroczy maksymalnego rozmiaru dokumentu BSON (16 MB).

Nie ma uniwersalnej „właściwej” wielkości partii. Powinieneś przetestować z różnymi wartościami i zobaczyć, jaka jest odpowiednia wartość dla twojego przypadku użycia, tj. ile dokumentów możesz przetworzyć w 10-minutowym oknie.

W ostateczności ustawisz no_cursor_timeout=True . Ale musisz mieć pewność, że kursor jest zamknięty po zakończeniu przetwarzania danych.

Jak tego uniknąć bez try/except :

cursor = collection.find(
     {"x": 1},
     no_cursor_timeout=True
)
for doc in cursor:
    # do something with doc
cursor.close()


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 3 sposoby na zwracanie odrębnych wartości w MongoDB

  2. Jak zaktualizować wartości za pomocą pymongo?

  3. MongoDB $indexOfBytes

  4. 5 sposobów na wybranie wierszy o maksymalnej wartości dla ich grupy w SQL

  5. Mongodb $wciśnij w zagnieżdżonej tablicy