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中检索数组中的子文档