sql >> Databáze >  >> NoSQL >> MongoDB

pymongo.errors.CursorNotFound:ID kurzoru '...' není na serveru platné

Tato chyba se zobrazuje, protože kurzor na serveru vyprší (po 10 minutách nečinnosti).

Z dokumentace pymongo:

Kurzory v MongoDB mohou vypršet na serveru, pokud byly otevřené po dlouhou dobu, aniž by na nich byly provedeny nějaké operace. To může vést k vyvolání výjimky CursorNotFound při pokusu o iteraci kurzoru.

Když zavoláte collection.find metodou dotazuje kolekci a vrací kurzor na dokumenty. Chcete-li získat dokumenty, iterujte kurzor. Když iterujete přes kurzor, ovladač ve skutečnosti odesílá požadavky na server MongoDB, aby načetl další data ze serveru. Množství dat vrácených v každém požadavku je nastaveno pomocí batch_size() metoda.

Z dokumentace:

Omezuje počet dokumentů vrácených v jedné dávce. Každá dávka vyžaduje zpáteční cestu na server. Lze jej upravit tak, aby optimalizoval výkon a omezil přenos dat.

Nastavení batch_size na nižší hodnotu vám pomůže s chybami při vypršení časového limitu, ale zvýší se počet případů, kdy budete mít přístup k serveru MongoDB, abyste získali všechny dokumenty.

Výchozí velikost dávky:

U většiny dotazů vrátí první dávka 101 dokumentů nebo jen tolik dokumentů, aby přesáhly 1 megabajt. Velikost dávky nepřekročí maximální velikost dokumentu BSON (16 MB).

Univerzální "správná" velikost šarže neexistuje. Měli byste testovat s různými hodnotami a zjistit, jaká je vhodná hodnota pro váš případ použití, tj. kolik dokumentů můžete zpracovat za 10 minut.

Poslední možností bude nastavení no_cursor_timeout=True . Musíte se ale ujistit, že po dokončení zpracování dat je kurzor zavřený.

Jak se tomu vyhnout bez try/except :

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


  1. redis cluster reshard [ERR] Volání MIGRATE:ERR Chyba syntaxe

  2. Získejte dokumenty se štítky v seznamu, seřazené podle celkového počtu shod

  3. Existují nějaké důvody, proč bych měl/neměl používat ObjectId v mé RESTful url

  4. Pipelining vs Batching v Stackexchange.Redis