即使no_cursor_timeout = True,游标ID在服务器上也无效

时间:2015-04-15 11:24:16

标签: mongodb pymongo

Traceback (most recent call last):
  File "from_mongo.py", line 27, in <module>
    for sale in pm.events.find({"type":"sale", "date":{"$gt":now-(_60delta+_2delta)}}, no_cursor_timeout=True, batch_size=100):
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 968, in __next__
    if len(self.__data) or self._refresh():
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 922, in _refresh
self.__id))
  File "/usr/local/lib/python2.7/dist-packages/pymongo/cursor.py", line 838, in __send_message
codec_options=self.__codec_options)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 110, in _unpack_response
cursor_id)
pymongo.errors.CursorNotFound: cursor id '1025112076089406867' not valid at server

我还尝试了更大或更小的批量大小,根本没有no_cursor_timeout。我甚至设法在一个非常小的集合(200个带有id和标题的文档)上得到这个错误。当数据库没有响应时(重插入)似乎会发生这种情况。该设置是由3个副本集(3个mongodb实例)组成的集群,mongodb 3.0。

2 个答案:

答案 0 :(得分:2)

根据回溯中的行号,看起来你正在使用上周发布的PyMongo 3。您是否在分片群集中使用多个mongos服务器?如果是这样,错误可能是PyMongo 3中一个关键的新错误的症状:

https://jira.mongodb.org/browse/PYTHON-898

它将在PyMongo 3.0.1中修复,我们将在一周内发布。

答案 1 :(得分:0)

我认为我正在使用pymongo 3.0,它有一个名为no_cursor_timeout=True的标志,实际上我使用的是2.8。