使用 pymongo 读取和更新 mongodb 文档的最佳方法

2023-12-30

我试图逐个读取 mongodb 集合文档,以获取每条记录,加密记录中的一些字段并将其放回数据库。

for record in coll.find():
    #modifying record here
    coll.update(record)

这导致了一个严重的问题,即已经更新的文档被光标再次读取,并且相同的文档在循环中再次处理(相同的文档正在尝试再次更新)

希望这可能是解决问题的方法之一。

list_coll = [record for record in coll.find()]
for rec in list_coll:
   #modifying record
   coll.update(rec)

但这是最好的做法吗?即如果集合很大会发生什么?较大的list_coll会导致内存溢出吗? 请建议我最好的方法。

thanks


你想要的“批量操作API” http://api.mongodb.org/python/current/examples/bulk.html来自 MongoDB。主要是随 MongoDB 2.6 引入的,因此如果您目前还没有升级,这是一个令人信服的理由进行升级。

bulk = db.coll.initialize_ordered_bulk_op()
counter = 0

for record in coll.find(snapshot=True):
    # now process in bulk
    # calc value first
    bulk.find({ '_id': record['_id'] }).update({ '$set': { 'field': newValue } })
    counter += 1

    if counter % 1000 == 0:
        bulk.execute()
        bulk = db.coll.initialize_ordered_bulk_op()

if counter % 1000 != 0:
    bulk.execute()

更好的是,您不会向服务器发送“每个”请求,而是每 1000 个请求中发送一次。 “批量 API”实际上在某种程度上为您解决了这个问题,但您实际上希望更好地“管理”它,并且不要在应用程序中消耗太多内存。

未来之路。用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pymongo 读取和更新 mongodb 文档的最佳方法 的相关文章

随机推荐