2

我开始使用 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: no such item for Cursor instance ”。从我所能找到的关于这个错误的所有信息中,它应该只在您没有任何与您的查询匹配的记录时发生。但是,我已经清楚地检查了我的光标中是否有项目。ReplicaSetConnection 是否发生了一些奇怪的事情,这使得这些读取操作更加不稳定?

4

1 回答 1

7

哦,我是个白痴。原来我有另一个线程同时运行一些测试代码。因此,有一个并发进程在我检查游标然后从中提取数据所花费的时间跨度内修改了数据库。

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

干杯,--彼得

于 2012-08-22T18:35:29.990 回答