使用 python 函数更新 mongodb 中所有文档的智能方法

Smart way to update all documents in mongodb using python function

我对集合的所有元素执行 some_python_function。 此函数 returns 每个文档的不同值。

我开发了下面的功能,但是速度很慢

for doc in db.collection.find(query, projection):
    result = db.collection.update_one(
        {"_id": doc["_id"]}, 
        {"$set": {"field": some_python_function(doc["field"])}}
    )

我正在寻找更聪明的方法来做到这一点,而不是一个接一个地更新文档。

你会推荐什么?

编辑: 我刚刚在 API 中发现批量操作: https://pymongo.readthedocs.io/en/stable/examples/bulk.html

from pymongo import UpdateOne

updates = []
for doc in db.collection.find(filter, projection):
    if doc.get("titles"):
        updated_field = some_python_function(doc["field"])
        if doc["field"] != updated_field:
            updates.append(
                UpdateOne(
                    {"_id": doc["_id"]}, 
                    {"$set": {"field": updated_field)}}
                )
            )
if updates:
    result = collection.bulk_write(updates)

使用bulkWrite一次写入多个文档。

Here is an answer 类似问题。