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

时间:2012-08-21 17:56:25

标签: mongodb replication 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]

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

1 个答案:

答案 0 :(得分:6)

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

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

干杯, --Peter