我试图逐个读取 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(使用前将#替换为@)