如何解决 Pymongo 的这个错误?pymongo 未找到光标 ID

Don*_*rry 2 python django ubuntu mongodb pymongo

我正在获取 MongoDB 中某些集合的全部数据,一段时间后(例如 30 或 60 分钟),脚本会引发以下错误:

pymongo.errors.CursorNotFound:未找到光标 id 1801580172063793986,完整错误:{'ok':0.0,'errmsg':'未找到光标 id 1801580172063793986','code':43,'codeName':'CursorNotFound'}

这个错误发生在24k文件之后。我正在使用 Django 和 Pymongo 连接到本地服务器上的数据库。该集合包含大约 60k 文档。

这就是我获取数据的方式:

client = MongoClient(settings.MONGO_HOST, settings.MONGO_PORT)
collection = client[settings.MONGO_DB].collection
cursor = collection.find(no_cursor_timeout=True)
for document in cursor:
    # getting the data from the user
Run Code Online (Sandbox Code Playgroud)

以防万一,我正在使用:

  • Python 3.8
  • 姜戈3.1.4
  • 皮蒙戈 3.11.0
  • Mongod 4.4.2(对于本地服务器)
  • 乌班图20.04

Don*_*rry 6

这不是错误的解决方案,但这是避免错误的一种方法。为了在尽可能短的时间内使用光标,您可以将所有数据保存在列表或类似的内容中。

client = MongoClient(settings.MONGO_HOST, settings.MONGO_PORT)
collection = client[settings.MONGO_DB].collection
cursor = collection.find(no_cursor_timeout=True)

collection_data = [document for document in cursor]
for document in collection_data:
    # using the data
Run Code Online (Sandbox Code Playgroud)