db.collection.find() 的时候,它返回的不是所有的数据,实际上是一个“cursor”。它的默认行为是:第一次向数
据库查询 101 个文档,或 1 MB 的文档,取决于哪个条件先满足;之后每次 cursor 中的文档用尽后,查询 4 MB
的文档。另外,find() 的默认cursor超时时间是10分钟。如果一个 batch 的文档十分钟内没处理完,过后再处理
完了,再用同一个 cursor id 向服务器取下一个 batch,这时候 cursor id 已经过期了,就会报 cursor id 无效的错误。
解决方法,两种、
1、find() 时传入 timeout=False
for document in db.collection.find(timeout=False)
2、估计一个 batch 大小, 10 分钟内能处理完。
for document in db.collection.find().batch_size(40):
阅读(5495) | 评论(0) | 转发(0) |