【发布时间】:2014-10-18 13:15:22
【问题描述】:
我正在尝试逐个文档读取 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 会导致 ram 溢出吗? 请给我建议一个最好的方法。
谢谢
【问题讨论】:
-
我想不出更好的方法,所以我不会填写答案。推荐生成器而不是创建记录列表可能会很疯狂,因为我认为您会遇到同样的问题。我很可能会使用您的解决方案,尽管如果我要更新非常大的集合,我会在创建列表时删除不必要的值的记录,只是为了节省一些额外的空间(这可以防止“ram 溢出”)。如果您认为这是现实场景,您可能应该一次取一些集合。 (注意:您可以在修改后的记录中添加标志并使用第一个 sn-p,但需要开销)
-
是的,但我的条纹列表也会很大,这是我的问题。
-
@wudpecker 我认为这里的真实情况是“你想做什么?”当有特定意图或通常意味着您需要“读取”一个值并修改它然后写回某些内容时,使用“nothing”查询循环是有意义的。但是,如果您只是想修改某些内容,那么通常有更好的方法。所以试着改变你的问题,说出你真正想做的事情。然后你就会得到真正的答案。
-
感谢@NeilLunn,已编辑
-
好的。至少意图更清晰。在我的阅读中,还有一种更好的方法尚未解决。
标签: python mongodb pymongo mongodb-query