¿Cómo funciona el guardado en mongoID?

Hay un objeto y un subobjeto incrustado.

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

Salida de consola

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

Aquí sucede algo interesante. Mongoid en realidad no guarda el objeto porque el objeto no se modificó. Es decir, no hay llamada a mongodb. Pero la operación de guardado en sí toma 18 (!!!) segundos.

¿Alguien puede explicarme qué está pasando y cómo puedo evitarlo?

Gracias.

preguntado el 12 de junio de 12 a las 07:06

Actualización: descubrí que hay problemas de validación. ¡Parece que pasa recursivamente a través de todo run_validate! métodos de todos los niños y eso hace que se pierda el tiempo. Pero, ¿por qué no comprueba que el objeto no haya cambiado? -

1 Respuestas

esto debería hacerlo:

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

Respondido el 12 de junio de 12 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.