sql >> Database teknologi >  >> NoSQL >> MongoDB

pymongo.errors.CursorNotFound:markør-id '...' er ikke gyldig på serveren

Du får denne fejl, fordi markøren er ved at udløbe på serveren (efter 10 minutters inaktivitet).

Fra pymongo-dokumentationen:

Markører i MongoDB kan timeout på serveren, hvis de har været åbne i lang tid, uden at der er udført nogen handlinger på dem. Dette kan føre til, at en CursorNotFound-undtagelse hæves, når du forsøger at gentage markøren.

Når du ringer til collection.find metoden forespørger en samling, og den returnerer en markør til dokumenterne. For at få dokumenterne gentages markøren. Når du itererer over markøren, sender driveren faktisk anmodninger til MongoDB-serveren om at hente flere data fra serveren. Mængden af ​​data, der returneres i hver anmodning, er indstillet af batch_size() metode.

Fra dokumentationen:

Begrænser antallet af dokumenter, der returneres i én batch. Hver batch kræver en rundtur til serveren. Den kan justeres for at optimere ydeevnen og begrænse dataoverførsel.

Indstilling af batch_size til en lavere værdi vil hjælpe dig med timeout-fejlene, men det vil øge antallet af gange, du får adgang til MongoDB-serveren for at få alle dokumenterne.

Standard batchstørrelse:

For de fleste forespørgsler returnerer den første batch 101 dokumenter eller bare nok dokumenter til at overstige 1 megabyte. Batchstørrelse vil ikke overstige den maksimale BSON-dokumentstørrelse (16 MB).

Der er ingen universel "rigtig" batchstørrelse. Du bør teste med forskellige værdier og se, hvad der er den passende værdi for din use case, dvs. hvor mange dokumenter kan du behandle i et 10-minutters vindue.

Den sidste udvej vil være, at du indstiller no_cursor_timeout=True . Men du skal være sikker på, at markøren er lukket, når du er færdig med at behandle dataene.

Sådan undgår du det uden try/except :

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


  1. Er der forskel på to lister?

  2. Rækkefølgen af ​​svar på MongoDB $i forespørgsel?

  3. Rails Redis indstilling af maxmemory og maxmemory-policy

  4. MongoDB $nin Query Operator