Ruby on rails 在mongoID中如何保存

Ruby on rails 在mongoID中如何保存,ruby-on-rails,performance,mongoid,Ruby On Rails,Performance,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&

存在一个对象和嵌入的子对象

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
irb(main):060:0>obj=Object.first
=> #
irb(主):061:0>obj.sub_objects.size
=> 24000
irb(主):062:0>obj.save
=>正确
发生了一件有趣的事。 Mongoid实际上没有保存对象,因为对象没有更改。 也就是说,没有呼叫mongodb。 但是保存操作本身需要18(!!!)秒

有人能告诉我发生了什么,我怎样才能避免吗

谢谢。

这应该可以做到:

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

更新:我发现有验证问题。似乎它递归地通过所有run_验证!所有儿童的方法,这会造成时间浪费。但为什么它不检查对象是否未更改?