MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

pymongo.errors.CursorNotFound:идентификаторът на курсора '...' не е валиден на сървъра

Получавате тази грешка, защото курсорът изтича на сървъра (след 10 минути бездействие).

От документацията на pymongo:

Курсорите в MongoDB могат да изтекат на сървъра, ако са били отворени дълго време, без да се извършват никакви операции върху тях. Това може да доведе до възникване на изключение CursorNotFound при опит за повторение на курсора.

Когато извикате collection.find метод той запитва колекция и връща курсор към документите. За да получите документите, итерирайте курсора. Когато итерирате над курсора, драйверът всъщност отправя заявки към сървъра на MongoDB, за да извлече повече данни от сървъра. Количеството данни, върнати във всяка заявка, се задава от batch_size() метод.

От документацията:

Ограничава броя на документите, върнати в една партида. Всяка партида изисква двупосочно пътуване до сървъра. Може да се регулира, за да оптимизира производителността и да ограничи преноса на данни.

Задаването на batch_size на по-ниска стойност ще ви помогне с грешките при изчакване за изчакване, но ще увеличи броя пъти, в които ще получите достъп до сървъра на MongoDB, за да получите всички документи.

Размерът на партидата по подразбиране:

За повечето заявки първата партида връща 101 документа или достатъчно документи, които да надхвърлят 1 мегабайт. Размерът на партидата няма да надвишава максималния размер на документа BSON (16 MB).

Няма универсален "правилен" размер на партидата. Трябва да тествате с различни стойности и да видите каква е подходящата стойност за вашия случай на употреба, т.е. колко документа можете да обработите за 10-минутен прозорец.

Последната възможност е да зададете no_cursor_timeout=True . Но трябва да сте сигурни, че курсорът е затворен, след като приключите с обработката на данните.

Как да го избегнем без 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. Как да се свържа с MongoDB в Windows?

  2. как да $project ObjectId към низова стойност в mongodb агрегат?

  3. Мангуста, сортирайте заявката по попълнено поле

  4. MongoDB - Създаване на колекция

  5. MongoDB deleteMany()