使用pymongo的ReplicaSetConnection:有时会得到"IndexError:没有这样的Cursor项目"

pba*_*nka 1 replication mongodb pymongo

我开始使用pymongo(版本2.2.1)ReplicaSetConnection对象而不是pymongo.Connection对象.现在,当我从数据库执行读取时,例如:

if cur.count() == 0:
    raise NoDocumentsFound(self.name, self.COLLECTION_NAME)
elif cur.count() > 1:
    raise TooManyDocumentsFound(self.name, self.COLLECTION_NAME)

cur.rewind()
rec = cur[0]
Run Code Online (Sandbox Code Playgroud)

我有时会在最后一行收到" IndexError:Cursor实例没有这样的项 ".从我可以找到有关此错误的所有内容,只有当您没有任何与您的查询匹配的记录时才会发生此错误.但是,我已经清楚地检查过我的光标中有项目.ReplicaSetConnection是否存在奇怪的问题,这使得这些读取操作更加不稳定?

pba*_*nka 6

哦,我是个白痴.事实证明我有另一个线程同时运行一些测试代码.因此,有一个并发进程在我检查光标然后从中拉出数据所花费的时间跨度内修改了数据库.

这是一个有趣的例子,说明游标是如何延迟的,并且游标对象本身不仅仅是一个简单的数组.

干杯, - 彼得