Перебирая все записи и меняя их между - PullRequest
1 голос
/ 24 марта 2012

Мне просто любопытно, что произойдет в этом сценарии

(Моя установка - MongoDB, Ruby on Rails через MongoID)

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)

Если нет, то как бы мы запрограммировали его, чтобы получить желаемый эффект (цикл через два?) - Скажем, я хотел бесконечно обрабатывать грабли?

1 Ответ

1 голос
/ 26 марта 2012

Если у вас достаточно памяти для выполнения задачи, вы можете использовать Models.all.entries.each вместо Models.all.each.

. То, как вы в данный момент выполняете итерацию по записи, использует курсоры mongodb, которые могут или не могут (яне уверен) зацикливаться бесконечно.

Однако Models.all.entries будет извлекать документы из базы данных, прежде чем выполнять их итерацию, поэтому вы можете быть уверены, что не будете выполнять итерации по вновь созданным документам.Осторожно, если у вас будет много громоздких документов, у вас будет много памяти.

...