python - 如何在mongodb中使用python一次更新500条记录?

Posted

技术标签:

【中文标题】python - 如何在mongodb中使用python一次更新500条记录?【英文标题】:How to update 500 records at a time in mongodb with python? 【发布时间】:2020-12-04 06:14:36 【问题描述】:
input_values = ["001":"john","002":"Josh"] (consider there are many dicts in this)

要更新的集合:


id : ObjectId("asasas87897s89as")
"name_id": "name1",
"name": ""

我需要将 input_values 字典的键与集合的 name_id 匹配并更新值。

我试过的代码:

    for key, value in input_values.items():
            self.client[collection].update("name_id": key,
                                          "$set": "name": value,
                                          upsert=False, multi=True)

但这一次更新一条记录。但我需要一次处理 500 条记录。我正在使用 pymongo。

【问题讨论】:

【参考方案1】:

你需要使用BulkWrite的方法:

每组的操作数不能超过数据库的maxWriteBatchSize的值。从 MongoDB 3.6 开始,此值为 100,000。该值显示在 isMaster.maxWriteBatchSize 字段中。

此限制可防止出现过大错误消息的问题。如果一组 超过此限制,客户端驱动程序将组划分为更小的 计数小于或等于限制值的组。为了 例如,maxWriteBatchSize 值为 100,000,如果队列 由 200,000 个操作组成,驱动程序创建 2 个组,每个组具有 100,000 次操作。

使用 pymongo 库,您需要将更新聚合到列表中并执行批量写入操作。下面是一些示例,只是为了了解 pymongo 中批量操作的想法:

from pymongo import UpdateOne, MongoClient

db = MongoClient()

input_values = ["001": "john", "002": "Josh"]

updates = []

for value in input_values:
    key = list(value.keys())[0]
    updates.append(UpdateOne('name': key, '$set': 'name': value[key]))

db.collection.bulk_write(updates)

【讨论】:

以上是关于python - 如何在mongodb中使用python一次更新500条记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 MongoEngine 查询 MongoDB 中的特定文档?

如何使用python在mongodb的两种不同类型的字段或索引或标题中搜索值?

如何跟踪来自特定城市的推文并通过 python 存储在 MongoDB 中?

如何使用python脚本从mongoDB中检索数组中的子文档

如何使用python脚本从mongoDB中检索数组中的子文档

如何关闭 mongodb python 连接?