MongoDb 使用 pymongo 快速更新大型集合中的字段

MongoDb update a field in a huge collection using pymongo fast

我在 mongoDB 的一个集合中有 13GB 的文档,我需要更新一个字段 ip_address。 excel sheet 中给出了原始值和替换值。我正在遍历 excel 中的每个值并使用以下方法更新它:

old_value={"ip_address":original_value}
new_value={"$set":{"ip_address":replacement_value}
tableConnection.update_many(old_value,new_value)

为了处理 1 个更新,它需要 2 分钟多的时间。我有 1500 个更新要做。有没有更好的方法呢?

批量操作不会大大加快您的更新速度;实现性能提升的最佳方法是添加索引。这可以很简单:

db.collection.createIndex({'ip_address': 1})

请参阅有关某些旧版本数据库的潜在阻塞的文档https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/

索引会占用额外的存储;如果这是一个问题,您可以在完成更新后删除索引。

除了 Belly Buster 给出的上述答案之外,在 PyMongo 中执行索引和 bulk_write 的语法对我有用:

db.collection.create_index("ip_address")

requests = [UpdateMany({'ip_address': 'xx.xx.xx.xx'}, {'$set': {'ip_address':'yy.yy.yy.yy'}}),[UpdateMany({'ip_address': 'xx.xx.xx.xx'}, {'$set': {'ip_address':'yy.yy.yy.yy'}})]
try :
      db.collection.bulk_write(requests, ordered=False)
except BulkWriteError as bwe: 
      print(bwe)