如何关闭MongoDB中的游标

时间:2015-10-06 13:45:12

标签: mongodb python-2.7

您好我是使用 mongo_collection.find()从mongdb获取文档,此集合包含600k文档。在遍历400k文档后,我正在设置错误

Traceback (most recent call last):
  File "mongo_opp.py", line 324, in <module>
    obj.indexAnswer()
  File "mongo_opp.py", line 241, in indexAnswer
    for dict_result in result:
  File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 1032, in next
  File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 974, in _refresh
  File "build/bdist.linux-x86_64/egg/pymongo/cursor.py", line 864, in __send_message
  File "build/bdist.linux-x86_64/egg/pymongo/helpers.py", line 112, in _unpack_response
pymongo.errors.CursorNotFound: Cursor not found, cursor id: 83302133311

此问题的解决方案是设置超时参数 mongo_collection.find(timeout = False) ,我在下面的链接中找到了

StackOveflowLink1

StacKOverflowLink2

设置超时参数会使游标无限时打开,这会影响系统性能。任何人都可以帮助我关闭游标。帮助赞赏:)

3 个答案:

答案 0 :(得分:1)

嘿,您可以使用 del 关键字

解决此问题
result = mongo_collection.find(no_cursor_timeout=True)

del result

检查Link1Link2

答案 1 :(得分:1)

要关闭光标,您需要删除您放置查询结果的变量

del cursor

cursor.close()

您还可以通过选择较低的batch_size值来解决问题:

(以Pymongo为例)

col.find({}).batch_size(10)

答案 2 :(得分:0)

Python使用引用计数进行对象生存期管理,当Cursor对象超出范围时,垃圾收集器将调用__die()来关闭游标。如果你想要显式控制,你可以自己调用close()。

Close()在内部调用__die()。检查此out