我对这种情况下会发生什么感到有点好奇
(我的设置是MongoDB,通过MongoID的Ruby on Rails)
Models.all.each do |model|
model.destroy #delete the record
newmodel = model.new #make a new record
newmodel.someinfo = info #fill it with some info
newmodel.save #save it
end
如果我们在循环中销毁记录并创建一个新记录 我们会永远地循环(因为我们正在删除旧的并添加一个新的)
我的意思是,我们可能会循环浏览我们会添加的新记录(在#save it
的行上)
如果没有,我们将如何编码以获得所需的效果(循环两次?) - 说我想要一个无限处理rake任务?
答案 0 :(得分:1)
如果您有足够的内存来执行任务,则可以使用Models.all.entries.each
代替Models.all.each
。
您当前正在迭代记录的方式使用mongodb游标,它可以或不可以(我不确定)无限循环。
但是,Models.all.entries
将在迭代之前从db获取文档,因此您可以确保不会在新创建的文档上进行迭代。请注意,如果你有大量庞大的文档,它会占用大量内存。