2012-03-24 148 views
1

我只是有點好奇之間改變他們作爲在這種情況下會發生什麼循環遍歷所有的記錄和

(我的設置是一個MongoDB的和Ruby on通過MongoID 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

如果不是我們將如何編碼它來獲得所需的效果(循環兩次?) - 說我想要一個無限處理耙任務?

+0

你爲什麼不試試? – 2012-03-24 17:01:48

+0

我現在已經跑了2個小時了。 – Akshat 2012-03-24 17:03:21

+0

因此,混亂,不知道它應該永遠去..那些遇到類似的東西呢? – Akshat 2012-03-24 17:03:51

回答

1

如果您有足夠的內存用於該任務,則可以使用Models.all.entries.each而不是Models.all.each

您當前正在遍歷記錄的方式使用mongodb遊標,它可以或不可以(我不確定)循環無限。

但是,Models.all.entries在迭代它們之前將從db獲取文檔,因此您可以確定您不會迭代新創建的文檔。要小心,如果你有很多龐大的文件,它會佔用大量的內存。