在pymongo中修改batch_size时,在下一个(游标)上获取StopIteration异常

时间:2014-06-01 20:52:39

标签: python mongodb pymongo

我有一些代码:

cursor = self.db.coll.find({})
cursor.batch_size(100)
last   = next(cursor)
while True:
   ...
   while a>b:
       last = next(cursor)
   ...

除了我想使用成语从下一个光标拉出,而不是用于循环。 我看到的是,接下来在100块之后引发StopIteration,我希望它在块结束时刷新。如果我删除batch_size它按预期工作,但我需要关闭batch_size。我查看了驱动程序的源代码,它有类似的内容:

def next(self):
     if self.__empty:
         raise StopIteration
     db = self.__collection.database
     if len(self.__data) or self._refresh():
         next = db._fix_outgoing(self.__data.pop(0), self.__collection)
     else:
         raise StopIteration
     return next

我没有达到那个自我的目的.__空,这被解释为支持某些切片的一些丑陋方式。我在下一行看到的更有意义:如果它有数据或成功刷新,否则它会继续,但我的调用似乎没有到达那一点...... 我需要做什么才能让next()继续拉下一批?

1 个答案:

答案 0 :(得分:1)

在您检查> b的while条件下,请同时检查光标是否有更多项目。这是在pymongo中用alive完成的。

参考:http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.alive