2012-06-12 55 views
0

有一個對象和嵌入式子對象如何保存工作mongoID

class Object 
    include Mongoid::Document 

    embeds_many :sub_objects 
end 

class SubObject 
    include Mongoid::Document 

    field :str1,:type => String 
    field :ind1,:type => Integer 

    embedded_in :object 
end 

控制檯輸出

irb(main):060:0> obj = Object.first 
=> #<Object _id: 4fd5ed971d41c8252c001f49, ..............> 
irb(main):061:0> obj.sub_objects.size 
=> 24000 
irb(main):062:0> obj.save 
=> true 

這裏是有趣的事情發生了。 Mongoid實際上並沒有保存對象,因爲對象沒有改變。 也就是說沒有電話給mongodb。 但保存操作本身需要18(!!!)秒。

任何人都可以解釋我發生了什麼,我該如何避免它?

謝謝。

+0

更新:我想通了,有驗證問題。似乎它遞歸通過所有run_validate!所有兒童的方法,並導致浪費時間。但爲什麼它不檢查對象是不是改變?

回答

0

這應該這樣做:

obj.save if !obj.persisted? || obj.changed? # only save if new record, or something changed