簡體   English   中英

pymongo db.collection.update operationFailure

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM