循环遍历所有记录并在两者之间进行更改

时间:2012-03-24 16:53:01

标签: ruby-on-rails ruby mongodb mongoid

我对这种情况下会发生什么感到有点好奇

(我的设置是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任务?

1 个答案:

答案 0 :(得分:1)

如果您有足够的内存来执行任务,则可以使用Models.all.entries.each代替Models.all.each

您当前正在迭代记录的方式使用mongodb游标,它可以或不可以(我不确定)无限循环。

但是,Models.all.entries将在迭代之前从db获取文档,因此您可以确保不会在新创建的文档上进行迭代。请注意,如果你有大量庞大的文档,它会占用大量内存。