我有大量文档正在尝试使用pymongo.update函数进行更新。我正在查找属于某个多边形的所有文档,并更新使用“update_value”找到的所有点。
for element in geomShapeCollection:
db.collectionName.update({"coordinates":{"$geoWithin":{"$geometry":element["geometry_part"]}}}, {"$set":{"Update_key": update_value}}, multi = True, timeout=False)
对于较小的集合,此命令按预期工作。在最大的数据集中,该命令适用于 70-80% 的数据,然后抛出错误:
pymongo.errors.OperationFailure:游标 id '428737620678732339' 在服务器上无效
pymongo 文档告诉我这可能是由于超时问题。
如果 MongoDB 中的游标已经打开很长时间而没有对其执行任何操作,它们可能会在服务器上超时。
通读 pymongo 文档,find() 函数有一个用于超时的布尔标志。
find(spec=None, fields=None, skip=0, limit=0, timeout=True, snapshot=False, tailable=False, _sock=None, _must_use_master=False,_is_command=False)
但是更新功能似乎没有这个:
update(spec, document, upsert=False, manipulate=False, safe=False, multi=False)
有没有办法为更新功能设置这个超时标志?有什么办法可以改变这个,这样我就不会得到这个 OperationFailure 错误?我是否正确假设这是一个超时错误,因为 pymongo声明它在
当数据库操作失败时引发。