[英]pymongo db.collection.update operationFailure
我有一大堆文檔,我正在嘗試使用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 聲明它會拋出此錯誤
數據庫操作失敗時引發。
經過一些研究和大量實驗后,我發現外部循環光標導致了錯誤。
for element in geomShapeCollection:
geomShapeCollection是mongodb集合的游標。 geoShapeCollection中有幾個元素會丟失大量元素,因為這些更新需要花費相當長的時間才能關閉geomShapeCollection游標。
問題不在於更新功能。 將(timeout = False)添加到外部游標可以解決此問題。
for element in db.geomShapeCollectionName.find(timeout=False):
db.collectionName.update({"coordinates":{"$geoWithin":{"$geometry":element["geometry_part"]}}}, {"$set":{"Update_key": update_value}}, multi = True, timeout=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.