django 如何解决Pymongo的这个错误?没有找到游标id pymongo

lpwwtiir  于 2023-01-31  发布在  Go
关注(0)|答案(3)|浏览(137)

我正在MongoDB中获取某个集合的全部数据,过了一段时间(大约30或60分钟),脚本引发了以下错误:
pymongo.errors.CursorNotFound:未找到游标ID 1801580172063793986,完整错误:{"确定":0.0,"错误消息":"未找到游标ID 1801580172063793986","代码":43,"代码名称":"未找到游标"}
这个错误发生在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

以防万一,我用的是:

  • Python 3.8语言
  • 强哥3.1.4
  • 派蒙戈3.11.0
  • Mongod 4.4.2(用于本地服务器)
  • Ubuntu 20.04
m2xkgtsf

m2xkgtsf1#

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

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
nfs0ujit

nfs0ujit2#

尝试通过cursorTimeoutMillis参数全局设置光标超时。
在终端中键入:

$ mongod --setParameter cursorTimeoutMillis=600000
gab6jxml

gab6jxml3#

请参阅https://jira.mongodb.org/browse/SERVER-36808和相关的链接票证。
服务器可以销毁打开的游标正在使用的会话,这会导致这些游标不可用。
https://jira.mongodb.org/browse/PYTHON-1626可能会有帮助,虽然在我看来,这个问题是在服务器端,截至目前尚未解决。

相关问题