如何在mongoID中保存工作

时间:2012-06-12 06:56:21

标签: ruby-on-rails performance mongoid

有一个Object和嵌入的SubObject

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(!!!)秒。

任何人都可以向我解释发生了什么,我该如何避免呢?

感谢。

1 个答案:

答案 0 :(得分:0)

这应该这样做:

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