gpt4 book ai didi

python - pymongo db.collection.update操作失败

转载 作者:行者123 更新时间:2023-11-30 23:32:05 25 4
gpt4 key购买 nike

我有大量文档,我正在尝试使用 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: cursor id '428737620678732339' not valid at server

pymongo 文档告诉我这可能是由于超时问题造成的。

Cursors in MongoDB can timeout on the server if they’ve been open for a long time without any operations being performed on them.

通读 pymongo 文档,find() function有一个 bool 值标志用于超时。

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 function似乎没有这个:

update(spec, document, upsert=False, manipulate=False, safe=False, multi=False)

有没有办法为更新函数设置这个超时标志?有什么方法可以更改此设置,这样我就不会收到此 OperationFailure 错误吗?我是否正确假设这是一个超时错误 pymongo states that it throws this error when

Raised when a database operation fails.

最佳答案

经过一些研究和大量实验,我发现是外循环游标导致了错误。

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)

关于python - pymongo db.collection.update操作失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com