我有一些代码:
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()继续拉下一批?
答案 0 :(得分:1)
在您检查> b的while条件下,请同时检查光标是否有更多项目。这是在pymongo中用alive
完成的。
参考:http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.alive