Overview

Para obtener instrucciones sobre cómo actualizar a versiones más recientes, visite mongoid.org.

A partir de la versión 5.0.2, por favor, consulta las publicaciones de github para los registros de cambios.

5.0.1

Problemas resueltos

  • Se añadió la prueba MONGOID-3020 para demostrar que ya no es un problema.

  • Se añadió la prueba MONGOID-3025 para demostrar que ya no es un problema.

  • MONGOID-3061 El problema ha dejado de existir.

  • Se añadió la prueba MONGOID-3073 para demostrar que ya no es un problema.

  • Se añadió la prueba MONGOID-3085 para demostrar que ya no es un problema.

  • MONGOID-3101 El problema ha dejado de existir.

  • MONGOID-3160 El problema ha dejado de existir.

  • MONGOID-3176 El problema ha dejado de existir.

  • Se añadió la prueba MONGOID-3214 para demostrar que ya no es un problema.

  • MONGOID-3296 Agregar devolución de llamada de actualización para counter_cache.

  • Se añadió la prueba MONGOID-3326 para demostrar que ya no es un problema.

  • MONGOID-3361 El problema ha dejado de existir.

  • Se añadió la prueba MONGOID-3365 para demostrar que ya no es un problema.

  • MONGOID-3402 Aplica opciones de persistencia al padre.

  • MONGOID-3524 El problema ha dejado de existir.

  • MONGOID-3529 La prueba ya existe y demuestra que no es un problema.

  • MONGOID-3543 La prueba ya existe y demuestra que no es un problema.

  • Se añadió la prueba MONGOID-3611 para demostrar que ya no es un problema.

  • MONGOID-3650 El problema ha dejado de existir.

  • MONGOID-3826, MONGOID-4109 Corrección de fugas de atemporalidad.

  • Se añadió la prueba MONGOID-3946 para demostrar que ya no es un problema.

  • Se añadió la prueba MONGOID-3969 para demostrar que ya no es un problema.

  • MONGOID-3971 No es un problema.

  • MONGOID-3979 No es un problema, ya existen pruebas.

  • MONGOID-3985 No es un problema.

  • MONGOID-4078 El comportamiento es intencionado.

  • MONGOID-4079 No es un problema.

  • MONGOID-4088 Considera la notación de puntos en subdocumentos con los resultados de #pluck.

  • MONGOID-4098 Corregido mediante un cambio en el driver de Ruby. Véase RUBY-1029.

  • MONGOID-4101 No es un problema.

  • MONGOID-4106 No es un problema.

  • MONGOID-4110 No es un problema.

  • MONGOID-4119 Asegúrate de que el selector de criterios se convierta en un valor de operador de pipeline.

  • MONGOID-4121 No es un problema.

  • MONGOID-4123 Arreglado como resultado de MONGOID-4159.

  • MONGOID-4125 Asegúrese de que no se apliquen ámbitos no referenciados en los procs.

  • MONGOID-4132 No es un problema.

  • MONGOID-4157 Corregido en la versión 2.1.2 del driver de Ruby.

  • MONGOID-4162 adapta los mapeos de opciones de índices al nuevo controlador. (@Nielsomat)

  • Se añadió la prueba MONGOID-3737 para demostrar que ya no es un problema.

  • MONGOID-3621 No es un problema.

  • MONGOID-3551 No es un problema.

  • Se añadió la prueba MONGOID-3696 para demostrar que ya no es un problema.

  • Se añadió la prueba MONGOID-3858 para demostrar que ya no es un problema.

  • MONGOID-3672 No es un problema.

  • MONGOID-4172 Utilice el operador posicional solo en una anidación de nivel 1 de profundidad.

  • Se agregó un certificado público al repositorio y se firmó la gema si la clave privada está presente

5.0.0

Cambios principales (incompatibles con versiones anteriores)

  • Mongoid ahora utiliza el controlador oficial de Mongo Ruby 2.x en lugar de Moped.

  • La mayoría de las opciones de configuración específicas del controlador han cambiado; consulta aquí para ver las nuevas opciones.

  • Todas las referencias a session se sustituyen por client. Esto incluye la configuración de mongoid.yml, las opciones de store_in y todas las excepciones y módulos con Session en el nombre.

  • find_and_modify ha sido eliminado y reemplazado con 3 opciones: find_one_and_update, find_one_and_delete y find_one_and_replace.

  • text_search ha sido eliminada ya que ahora es una opción $text en una query a partir del 2.6.

  • Mongoid ya no soporta MongoDB 2.2; ahora el soporte es solo para 2.4 y superiores.

  • #3768 first y last ya no agregan una ordenación _id cuando no se proporcionan opciones de ordenación. Para garantizar que un documento sea el primero o el último, ahora debe contener una ordenación explícita.

  • Document#deleted? el alias ha sido eliminado, por favor continúa utilizando Document#destroyed?.

Nuevas características:

  • #4016 Permitir los setters privados y protegidos en los campos para operaciones atómicas. (Rob Smith)

  • #3985 Retornar nil al usar {upsert: true} en find_and_modify (Adrien Siami)

  • #3963 Permite que los identificadores de objetos JSON extendidos se pasen a find.

  • #3846 Permitir #pluck cuando no se utiliza ninguno en los criterios. (Braulio Martínez)

Problemas resueltos

  • #4091 Usa el contexto de subclase al llamar a un scope definido en una superclase. (Edgars Beigarts)

  • #4075 Se ha realizado el registro de remoción de índices específico para cada índice que realmente se estaba removiendo.

  • #4071 Se corrigió la carga de la relación enumerable para verificar los documentos agregados durante la iteración.

  • #4077 Muchas relaciones ahora incluyen Enumerable.

  • #4052 Se corrigió la validación de unicidad en campos localizados sin valor.

  • 4033 Eliminados todos los usos del operador posicional $ en las actualizaciones atómicas.

  • #4030 Las excepciones de Duplicados/Clonación incluyen automáticamente los atributos dinámicos.

  • #4005 Se corrigió la inclusión de mongoid con componentes Rails que no tienen el entorno Rails.

  • #3993 Corrige un problema donde dup/clone falla para los documentos incrustados que usan store_as sin usar Mongoid::Atributes::Dynamic.

  • #3991 Se corrigieron los documentos incrustados que no se marcaban como cambiados después de llamar a #changed? y modificando los elementos secundarios.

  • #3874 Agregar la opción de snapshot al contexto.

  • #3868 La carga de modelos en tareas de rake ahora expande la ruta de los rieles.

  • #3764 Comprobación fija de instrucción de caso para objetivos enumerables.

  • #3740 Corrige Missing attribute: '_id' error al usar métodos solo o sin ellos (dx7)

  • #3631 Corrige el problema donde la función de retorno before_save puede ser llamada dos veces después de la creación de un elemento secundario

  • #3599 Se corrigió la aplicación de los ámbitos por defecto de la superclase en las subclases.

  • #3104 Se corrigieron los objetivos enumerables para verificar el primero y el último en el orden adecuado.

4.0.2

Nuevas características:

  • #3931 Agrega #find_or_create_by! método para muchas asociaciones. (Tom Beynon)

  • #3731 ¡Agrega find_by! método. (Guillermo Iguarán)

Problemas resueltos

  • #3722 Usa el nombre correcto para la base de datos al combinar #store_in y #with. (Arthur Neves)

  • #3934 No aplique la ordenación al realizar un find_by. (Arthur Neves)

  • #3935 corrige la clasificación de varios campos en memoria contextual. (chamnap)

  • #3904 BSON::Document#symbolize_keys debe devolver las claves como símbolos. (Arthur Neves)

  • #3948 Solucionar remove_undefined_indexes en rails 4.2, para simbolizar correctamente las claves del documento. (Adam Wróbel)

  • #3626 Document#to_key, necesita devolver un ObjectId como String para que podamos hacer la query usando ese ID. (Arthur Neves)

  • #3888 ocurre un UnknownAttributeError cuando se llama 'set' en un campo inexistente y Mongoid::Attributes::Dynamic no está incluido en el modelo. (Shweta Kale)

  • #3889 'set' permitirá establecer el valor de un campo que no existe cuando Mongoid::Attributes::Dynamic esté incluido en el modelo. (Shweta Kale)

  • #3812 Se corrigió el contexto de validación al guardar (Yaroslav Zemlyanuhin)

4.0.1

Problemas resueltos

  • #3911 Corrija las relaciones denominadas "parent". (nkriege)

  • #3792/#3881 Se corrigen muchas llamadas internas a #_id en lugar de #id para evitar problemas al sobrecargar #id (Gauthier Delacroix)

  • #3847 Se corrige el resultado de 'QueryCache#get_more' cuando la colección contiene más documentos que el primer lote de consulta. (Angelica Korsun)

  • #3684 No elevar MissingAttributeError, al usar un alcance only(). (Arthur Neves)

  • El método #3703 pluck no debe compactar los valores. (Arthur Neves)

  • #3773 Use nanosegundos para la marca de tiempo de la clave de caché en lugar de segundos. (Máximo Mussini)

4.0.0

Cambios principales (incompatibles con versiones anteriores)

  • #3320 Elimine las dependencias de Rails en las tareas rake de la base de datos. (Arthur Neves)

    Todas las tareas rake de db:* deberían funcionar como antes al usar Rails. Cuando no se esté en un entorno Rails, simplemente cargue las tareas de la base de datos usando:

    load 'mongoid/tasks/database.rake'
    
  • Mongoid 4 solo es compatible con MongoDB 2.4.0 y versiones superiores.

  • Document#metadata Se ha renombrado a Document#relation_metadata para evitar conflictos comunes. Los proxies de relación también tienen este nombre.

  • Los alcances y los alcances predeterminados ahora deben definirse todos dentro de lambdas o procedimientos.

  • skip_version_check la opción de configuración se eliminó.

  • IdentityMap eliminado. (Arthur Neves)

  • Reelaboración de carga ansiosa. La carga anticipada ahora no necesita el mapa de identidad para cargar documentos relacionados. Un conjunto de precargadores puede cargar de forma anticipada las asociaciones pasadas a .includes método. (Arthur Neves)

  • Mongoid ahora soporta las nuevas preferencias de lectura que los drivers principales proporcionan. Éstos incluyen:

    • :primary:Siempre leerá desde un nodo principal. (predeterminado)

    • :primary_preferredRealiza un intento de atribuir primero al primer solicitante y después al secundario si no hay ninguno disponible.

    • :secondary: Siempre se leerá desde un nodo secundario.

    • :secondary_preferred: Intente con uno secundario primero, luego con uno primario si ninguno está disponible.

    • :nearest: Intentar leer desde el nodo con la latencia más baja.

    Sintaxis de ejemplo:

    Person.with(read: :secondary).first
    

    La opción :consistency ya no es válida, utiliza ahora la opción :read.

  • Mongoid ahora establece de forma predeterminada que todas las escrituras se propaguen (anteriormente "modo seguro") y ahora tiene una semántica de propagación diferente:

    • { w: -1 }No verifiques los guardados ni generes errores de red.

    • { w: 0 }:No verifique las escrituras y genere errores de red.

    • { w: 1 }: Verificar escrituras en el nodo principal. (predeterminado)

    • { w: n }: Verificar guardar en n número de nodos.

    • { w: "majority" }:Verifique escrituras en la mayoría de los nodos.

    Sintaxis de ejemplo:

    Person.with(write: {w: :majority}).create!(name: "John")
    

    La opción :safe ya no es válida, utilice la opción :write ahora.

  • #3230 Los campos de arreglo y hash ahora verifican que se estén asignando los tipos correctos, en lugar de aceptar cualquier tipo de valor. (Rodrigo Saito)

  • #3043/#2949 Renovación en los elementos internos de las opciones de persistencia. (Arthur Neves)

  • Mongoid ahora requiere Active Model 4 o superior.

  • Document#set ahora acepta múltiples atributos en forma de hash, en lugar de los anteriores (field, value) argumentos. Los alias de campo y la conversión de tipo también son ahora compatibles en esta operación.

    document.set(name: "Photek", likes: 10000)
    
  • Document#rename Ahora acepta múltiples atributos en forma de hash, en lugar de los argumentos (field, value) anteriores. Se admiten alias de campo.

    document.rename(first_name: "fn", last_name: "ln")
    
  • Document#inc ahora acepta múltiples atributos en forma de hash, en lugar de antes solo poder incrementar un valor a la vez. Se admiten alias y serialización.

    document.inc(score: 10, place: -1, lives: -10)
    
  • Document#pop ahora acepta múltiples atributos en forma de hash, en lugar de sólo poder extraer un valor a la vez como anteriormente. Se admiten alias y serialización.

    document.pop(names: 1, aliases: -1)
    
  • Document#bit Ahora acepta múltiples atributos en forma de hash, en lugar de solo poder aplicar un conjunto de operaciones a la vez. Se admiten alias y serialización.

    document.bit(age: { and: 13 }, score: { or: 13 })
    
  • Document#pull ahora acepta múltiples atributos en forma de hash, en lugar de la posibilidad anterior de extraer un solo valor a la vez. Se admiten alias y serialización.

    document.pull(names: "James", aliases: "007")
    
  • Document#pull_all ahora acepta múltiples atributos en forma de hash, en lugar de la posibilidad anterior de extraer un solo valor a la vez. Se admiten alias y serialización.

    document.pull_all(names: ["James", "Bond"], aliases: ["007"])
    
  • Document#push_all Se eliminó porque quedó obsoleto en MongoDB 2.4. Use Document.push en su lugar.

  • Document#push ahora acepta múltiples atributos en forma de hash y puede gestionar la inserción de valores únicos o múltiples al campo a través de $push con $each. Se admiten alias y serialización.

    document.push(names: "James", aliases: [ "007", "Jim" ])
    
  • Document#add_to_set Ahora acepta múltiples atributos en forma de hash, y ahora se admiten alias y serialización.

    document.add_to_set(names: "James", aliases: "007")
    
  • La API de operaciones atómicas de criterios ahora se modifica para que coincida con los cambios en la API atómica de documento único, por ejemplo:

    Band.where(name: "Depeche Mode").inc(likes: 10, followers: 20)
    
  • #3399 #create y #create! en las relaciones ahora pueden tomar una matriz de atributos como primer parámetro para crear múltiples documentos a la vez.

    person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
    person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
    
  • #3141 rake db:test:prepare ahora configura todos los índices definidos si Mongoid es el único ODM/ORM en el entorno.

  • Ahora se puede acceder a #3138 update_attributes simplemente llamando al update.

  • #3083 Se ha añadido una nueva tarea rake: rake db:mongoid:remove_undefined_indexes para remover índices de la base de datos que no estén definidos explícitamente en los modelos. (Aidan Feldman)

  • #3029 El campo relation_field que se añade para un caso de uso único con relaciones polimórficas ha sido eliminado. Así que donde antes funcionaría lo siguiente:

    class Eye
      include Mongoid::Document
      belongs_to :eyeable, polymorphic: true
    end
    
    class Face
      include Mongoid::Document
      has_one :left_eye, class_name: "Eye", as: :eyeable
      has_one :right_eye, class_name: "Eye", as: :eyeable
    end
    

    Esto ahora tendría que modelarse como (con la migración adecuada):

    class Eye
      include Mongoid::Document
      belongs_to :left_socket, class_name: "Face", inverse_of: :left_eye
      belongs_to :right_socket, class_name: "Face", inverse_of: :right_eye
    end
    
    class Face
      include Mongoid::Document
      has_one :left_eye, class_name: "Eye", inverse_of: :left_socket
      has_one :right_eye, class_name: "Eye", inverse_of: :right_socket
    end
    
  • #3075 update_attribute ahora llama correctamente al método setter en lugar de usar write_attribute.

  • #3060 Permitir bloques atómicos para permitir múltiples llamadas del mismo tipo. (Brian Norton)

  • Los índices de modelo #3037 ya no se almacenan en un hash index_options en la clase del modelo. En cambio, ahora existe un arreglo llamado index_specifications en la clase que contiene una lista de objetos Indexable::Specification. Esto es para que podamos gestionar adecuadamente el caso de índices con las mismas claves pero en diferente orden.

  • #2956 El almacenamiento en caché de las consultas ahora solo ocurre cuando se llama específicamente a cache. (Arthur Neves)

  • #2659 Mongoid::Railtie ahora usa correctamente solo un inicializador y el nombre ha cambiado a mongoid.load-config.

  • #2656 rake db:reseed ahora es rake db:reset (Arthur Neves)

  • #2648 Boolean se convierte en Mongoid::Boolean para evitar contaminar el espacio de nombres global con una clase comúnmente usada por otras librerías.

  • #2603 Los valores devueltos por los modificadores ahora siempre son el valor establecido, independientemente de si se llama al modificador o se utiliza send.

  • #2597 Mongoid::Observer fue eliminado en línea con Rails 4.

  • #2563 La opción de configuración allow_dynamic_fields ha sido eliminada ya que ahora se permiten campos dinámicos a nivel de modelo. Para permitir que un modelo utilice campos dinámicos, simplemente incluya el módulo en cada uno. (Josh Martin)

    class Band
      include Mongoid::Document
      include Mongoid::Attributes::Dynamic
    end
    
  • #2497 Llamar a to_json ya no interfiere con el valor de retorno del driver, y ahora se devuelven los valores correctos { "$oid" : object_id.to_s } en lugar de solo la representación en string como se hacía anteriormente.

  • #2433 Mongoid::Paranoia ha sido eliminado.

  • #2432 Mongoid::Versioning ha sido eliminado.

  • #2218 La creación o instanciación de documentos que tienen alcances predeterminados ahora aplicará el alcance predeterminado al documento, si el alcance no es complejo.

  • #2200 La seguridad de la asignación masiva ahora imita el comportamiento de Rails 4. La opción without_protection también fue eliminada. Se eliminó el método de clase attr_accessible. Mongoid y Strong parameters deberían funcionar bien para la protección asignación masiva.

  • delete_all y destroy_all ya no toman un hash :conditions sino solo los atributos sin procesar.

  • #1908 Los documentos que se carguen con los criterios #only o #without generarán un error al intentar guardar, actualizar o eliminar estos registros. Además, los campos excluidos de los campos recuperados de la base de datos también generarán una excepción al intentar acceder a ellos.

  • #1344 Las actualizaciones atómicas ahora pueden ejecutarse en un bloque atomically, lo que retrasará cualquier actualización atómica en el documento al que se llamó el bloque hasta que el bloque esté completo.

    Las llamadas de actualización se pueden ejecutar de forma normal en el bloque:

    document.atomically do
      document.inc(likes: 10)
      document.bit(members: { and: 10 })
      document.set(name: "Photek")
    end
    

    El documento también se produce en el bloque:

    document.atomically do |doc|
      doc.inc(likes: 10)
      doc.bit(members: { and: 10 })
      doc.set(name: "Photek")
    end
    

    Los comandos atómicos disponen de una interfaz fluida:

    document.atomically do |doc|
      doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
    end
    

    Si se utiliza la interfaz de fluido sin el bloque atomically, las operaciones permanecerán en llamadas individuales. Por ejemplo, lo siguiente haría 3 llamadas a la base de datos sin el bloque proporcionado:

    doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
    

    El bloque solo es válido para 1 documento a la vez, por lo que las actualizaciones de documentos incrustados y raíz no pueden mezclarse en este momento.

Nuevas características:

  • Mongoid ahora usa ActiveSupport::LogSubscriber para suscribir registros y ActiveSupport::Notifications para enviar registros de operaciones. (Arthur Neves) Ejemplo de suscripción a registros:

    ActiveSupport::Notifications.subscribe('query.moped') do |evento| .. end

  • Los tipos de campo pueden ahora utilizar símbolos además de nombres de clases. Consulta: github.com/mongoid/mongoid/blob/master/lib/mongoid/fields.rb#L16 para obtener información sobre los mapeos disponibles.

  • #3580 Los campos ahora se pueden restablecer a sus valores por defecto, con los métodos:

    document.reset_name_to_default!

  • #3513 Los documentos ahora tienen un método #destroy! que generará un error Mongoid::Errors::DocumentNotDestroyed si una devolución de llamada de destrucción devuelve un valor falso.

  • #3496 Se agregaron niveles de clase y niveles de criterio find_or_create_by!.

  • #3479 Map/reduce ahora respeta los criterios sin opciones de tiempo de espera si la salida no está en línea.

  • #3478 Los objetos de criterios ahora tienen un método #none que hará que los criterios nunca lleguen a la base de datos y siempre tengan cero documentos.

    Band.none Band.none.where(name: "Herramienta") # Siempre tiene cero documentos.

  • #3410 Mongoid ahora tiene una caché de query que puede utilizarse como middleware en aplicaciones Rack. (Arthur Neves)

    Para Rails:

    config.middleware.use(Mongoid::QueryCache::Middleware)

  • #3319 Los contadores ahora se pueden reiniciar desde una instancia de documento:

    document.reset_counters(:relation)

  • Las relaciones #3310 embedded_in ahora aceptan una opción touch para actualizar padres.

  • #3302 El uso de alias con alias_attribute ahora maneja adecuadamente los alias en los criterios.

  • El campo de rango #3155 mantendrá el exclude_end cuando se proporcione. (Daniel Libanori)

  • #3146 Añadiendo la opción de campo :overwrite, cuando sea verdadero, no se comprobarán los duplicados. (Daniel Libanori)

  • #3002 Recargar la consola de Rails también borrará ahora el mapa de identidad de Mongoid.

  • #2938 Se ha añadido una opción de configuración duplicate_fields_exception que, cuando se establece en true, generará una excepción al definir un campo que sobrescribirá un método existente. (Arthur Neves)

  • #2924 MongoDB 2.4 la búsqueda beta de texto ahora cuenta con un DSL proporcionado por Mongoid. Al igual que otras consultas, las búsquedas de texto se evalúan de manera perezosa y están disponibles a partir del nivel de clase o criterio.

    Ten en cuenta que cualquier complemento de 3tercera parte que proporcione un método text_search ahora dejará de funcionar con Mongoid y deberá cambiar su sintaxis. ejemplo:

    Band.text_search("mode").project(name: 1).each do |doc|
      # ...
    end
    
    Band.limit(10).text_search("phase").language("latin")
    Band.where(:likes.gt => 1000).text_search("lucy")
    
  • #2855 Ahora se pueden proporcionar múltiples extensiones a las relaciones. (Daniel Libanori)

Problemas resueltos

  • #3676 Hacer que el punteo funcione con asociaciones integradas (Arthur Neves)

  • #2898 Los métodos de atributos sucios ahora gestionan correctamente los alias de campo. (Niels Ganser)

  • #3620 Añade los métodos de instancia del módulo ActiveModel a la lista de métodos prohibidos. (Arthur Neves)

  • #3610 No permitir operaciones atómicas en atributos de solo lectura (Frederico Araujo)

  • #3619 No validar documentos marcados para destrucción. (Christopher J. Bottaro)

  • #3617 No omita la creación de índices en documentos cíclicos. (shaiker)

  • #3568 Se corrigió el error de atributos faltantes en los campos localizados actuales.

  • #3514 Se corrigió el caché de consultas para que funcione en la primera/última llamada.

  • #3383/#3495 Corregir has_and_belongs_to_many para carga ansiosa. (Arthur Neves)

  • #3492 Las operaciones de cambio de nombre no deben convertir valores en mongoísmos. (Vladislav Melanitskiy)

  • #3490 Permitir que los campos localizados funcionen con valores booleanos false.

  • #3487 Asocia booleano con Mongoid::Boolean en las definiciones de campo. (Arthur Neves)

  • #3449 Touch debe funcionar para crear y actualizar. (Greggory Rothmeier)

  • #3347 La creación de documentos fuera de los ámbitos para relaciones integradas ahora establece correctamente el documento principal en los secundarios creados.

  • #3432 Se corrigió la mongoización de DateTime que causaba pérdida de precisión.

  • #3397 Se corrigió el comparador $ne para documentos incrustados para que coincida con el comportamiento del servidor.

  • #3352 Permitir que los ámbitos nombrados "abiertos" funcionen a través de relaciones 1-n.

  • #3348 Solucionando los índices compuestos que tienen las mismas claves en diferentes direcciones. (Arthur Neves)

  • #2701 Se corrige una consulta adicional en el enlace belong_to. (Arthur Neves)

  • #3089 Permitir la demonización de cadenas a flotantes (Daniel Libanori)

  • #3278 El caché del contador también debería actualizar el documento en la memoria. (Arthur Neves)

  • #3242 La relación Has_many debe utilizar la clave foránea inversa. (Arthur Neves)

  • #3233 No double llamar las funciones de retorno de validación dos veces cuando la validación en cascada de hijos y relaciones esté activada.

  • #3197 Mejoras en las llamadas a aggregates en las colecciones raíz e incrustadas. (Wojciech Piekutowski)

  • #3144/#3219 Corrigiendo el choque de nombres en ivar @_children. (Arthur Neves)

  • #3088 El campo de rango puede aceptar un hash, que podría ser el atributo de la base de datos. (Daniel Libanori)

  • #3116 Las variables de instancia de Relaciones ahora están todas precedidas por _.

  • #3093 Solo nivelar 1 nivel al insertar arreglos atómicamente.

  • #3063 Document#becomes ahora establece correctamente el objeto base en caso de errores. (Adam Ross Cohen)

  • Las operaciones atómicas #3019 ya no intentarán persistir si el documento no se ha guardado.

  • #2903 Se eliminó la extensión de cadena to_a no utilizada.

3.1.7

Problemas resueltos

  • #3465 Errores de relación ambigua corregidos donde inverse_of está establecido en nil.

  • #3414 Omitir opciones de retroporte y límite en la agregación. (Wojciech Piekutowski)

  • #3469 Corrección de RegexpError: no se pudo asignar memoria: /./ en .hash_dot_syntax? (Dmitry Krasnoukhov)

3.1.6

Problemas resueltos

  • #3337 Asegúrese de que el mapa de campos localizados se clone con herencia.

  • #3262 Se corrigieron las operaciones atómicas de arreglos en los campos de clave externa HABTM para evitar que elementos individuales se conviertan en arreglo.

  • #3282 Se corrigió la opción .timeless para usar un atributo local del hilo en lugar de un atributo de clase. También se eliminaron los métodos timeless de toda la documentación y se agregaron solo a la documentación de marcas de tiempo. (Arthur Neves)

3.1.5

Problemas resueltos

  • #3231 Permitir la evolución de documentos proxy para trabajar en criterios.

  • #3247 Actualización de la dependencia de tzinfo a 0.3.29.

  • #3203 Se corrigió la especificación index: true para relaciones polimórficas.

  • #3192 Campos alias fijos + combinaciones de campos localizados con validación. (Johnny Shields)

  • #3173 Se solucionaron problemas relacionados con las relaciones de muchos a muchos con claves primarias personalizadas. (Bowen Sun)

  • Ahora la actualización de #3159 marca correctamente los documentos como persistentes.

  • #3137 Permitir múltiples conjuntos belongs_to en una fila con identificadores.

  • #3079 Los documentos incrustados con padres paranoicos perdían el _id al recargarlos desde la base de datos, ya que no tenían el valor de "persistente" correcto. (Arthur Neves)

  • Los method_missing de los criterios de #3081 ahora verifican si un arreglo responde al método proporcionado antes de llamar a las entradas, para no acceder a la base de datos si se genera una NoMethodError.

  • #3068 Corrige las pruebas de especificaciones en puertos de MongoDB no estándar si se establece MONGOID_SPEC_PORT.

  • #3047 Asegura que blank? y empty? no se pierdan debido a la ausencia de métodos en los criterios.

  • Incluye updated_at en cache_key incluso cuando es una marca de tiempo corta (Arthur Neves)

3.1.4

Problemas resueltos

  • #3044 Asegúrese de que los objetivos enumerables coincidan con las matrices en las declaraciones de caso.

  • #3034 first_or_create en el criterio ahora pasa correctamente el bloque para crear en lugar de llamar después de que se haya creado el documento.

  • #3021 Se eliminó la advertencia mongoid.yml del inicializador, ahora se maneja mediante las opciones de configuración de la sesión.

  • #3018 El validador de Unicidad ahora serializa correctamente los valores en su verificación. (Jerry Clinesmith)

  • #3011 Se ha corregido el soporte de alias de campo para la validación de unicidad. (Johnny Shields)

  • #3008 Se corrigió que las subclases fijas no pudieran heredar los alcances adecuadamente cuando el alcance se añade tras la carga de la clase. (Mike Dillon)

  • #2991 Document.timeless ahora se delimita correctamente a la instancia y no al thread.

  • #2980 Los campos dinámicos ahora manejan correctamente la edición in situ de hashes y arreglos. (Matthew Widmann)

  • #2979 pluck ya no modifica el contexto existente. (Brian Goff)

  • #2970 Corregir el caché del contador para usar correctamente el nombre de la relación si está disponible, luego el nombre de la clase inversa si no.

  • #2959 Los atributos anidados ahora respetarán a autosave: false si se define en la relación.

  • #2944 Se corrigió la validación de unicidad para campos localizados cuando no se distingue entre mayúsculas y minúsculas. (Vladimir Zhukov)

3.1.3

Problemas resueltos

  • No duplique documentos incrustados al guardar después de llamar al método become. (Arthur Neves)

  • #2961 Al volver a cargar una configuración mongoid.yml ahora se borran correctamente las sesiones configuradas previamente.

  • #2937 Ahora las cuentas pueden aceptar un argumento true para tener en cuenta la omisión y el límite. (Arthur Neves)

  • #2921 No utilices el tipo en la selección de mapas de identidad si la herencia no está en juego. (Arthur Neves)

  • #2893 Se eliminó la memorización del nombre de la colección y del nombre de la base de datos para que las lambdas con store_in funcionen correctamente al cambiar.

  • #2911 El atributo _destroy en las relaciones 1-n, al procesar atributos anidados, ahora puede ser una cadena o símbolo al recibir un arreglo.

  • #2886 Se corrigió el problema de nombres asociados con los generadores de Rails.

  • #2885 Toque fijo para campos con alias. (Niels Ganser)

  • #2883 Permitir que las relaciones cíclicas no generen errores de relación mixta.

  • #2867 pluck ahora gestiona correctamente los campos con alias.

  • #2862 El guardado automático ya no realiza queries extra innecesarias. (Arthur Neves)

3.1.2

Problemas resueltos

  • #2851 Se corrigió la desmongoización de valores NaN de BigDecimal. (nkem)

  • #2848 Solucionado touch para funcionar al usar sellos de tiempo cortos. (Arthur Neves)

  • #2840 Se ha corregido la gestión de opciones de no_timeout de extremo a extremo.

  • #2826 Los campos dinámicos ahora están correctamente mongoizados.

  • #2822 La carga Marshal de relaciones ahora vuelve a aplicar correctamente las extensiones.

3.1.1

Problemas resueltos

  • #2839 Validaciones corregidas para usar el valor de conversión de tipo, con la excepción del validador de numericidad. (Lailson Bandeira)

  • Las opciones de #2838 store_in ahora se fusionan correctamente en lugar de sobrescribirse. (Colin MacKenzie)

3.1.0

Nuevas características:

  • El requisito mínimo de MongoDB ahora se ha elevado a 2.2, ya que ahora dependemos del marco de agregación.

  • Las dependencias mínimas de Active Model y Active soporte se han elevado a 3.2.

  • #2809 Las relaciones ahora pueden especificar una clave principal para usar en lugar del ID en las claves externas.

    class Person
      include Mongoid::Document
      field :username, type: String
      has_many :cats, primary_key: "username"
    end
    
    class Cat
      include Mongoid::Document
      belongs_to :person, primary_key: "username"
    end
    
  • #2804 ahora se ha añadido soporte para $geoNear a los criterios.

    Bar.where(:likes.gt => 1000).geo_near([ 52, 13 ])
    Bar.geo_near([ 52, 13 ]).max_distance(0.5).spherical
    
  • #2799 Criteria#map ahora puede aceptar un símbolo de un nombre de campo, así como un bloque, para realizar un map más optimizado. (Gosha Arinich)

    Band.where(:likes.gt => 1000).map(:name)
    
  • #2798 Las agregaciones (sum, min, max, avg) ahora utilizan el marco de agregación en lugar de map/reduce. (Gosha Arinich)

  • #2776 MongoDB 2.4.x ahora se admiten nuevos tipos de índices: "2dsphere", "text" y "encriptada". (Irakli Janiashvili)

  • #2767 soporte de $maxScan de Origin ahora es compatible. (Jonathan Hyman)

  • #2701 Limpiando queries excesivas y extra de la base de datos con relaciones 1-1.

  • #2693 Se pueden pasar nombres de colecciones personalizadas al generador de modelos. (Subhash Bhushan)

    rails g model band --collection=artists
    
  • #2688 Model.create y Model.create! ahora pueden tomar un arreglo de hashes de atributos para crear múltiples documentos a la vez. Si se proporciona un arreglo de atributos, se devuelve un arreglo de documentos.

    Band.create([{ name: "Tool" }, { name: "Placebo" }])
    Band.create!([{ name: "Tool" }, { name: "Placebo" }])
    
  • #2670 La anulación de la configuración de campos ahora acepta varios campos en lugar de solo 1. (Arthur Neves)

    band.unset(:name, :founded)
    Band.where(name: "Placebo").unset(:members, :origin)
    
  • #2669 Pasar un bloque a Criteria#new ahora envía correctamente el bloque al constructor del modelo. (Arthur Neves)

  • #2667 exists? ya no accede a la base de datos en los casos en que tenemos la información necesaria en la memoria.

  • #2665 Mongoid ahora admite un contador de caché para las relaciones de belongs_to. (Arthur Neves)

    class Band
      include Mongoid::Document
      belongs_to :label, counter_cache: "b_count"
    end
    
    class Album
      include Mongoid::Document
      belongs_to :band, counter_cache: true
    end
    
  • #2662 Los documentos incrustados que tienen relaciones de belongs_to ahora pueden cargarlos anticipadamente.

  • #2657 Se han añadido métodos de obtención y establecimiento del registrador al módulo Config. (Arthur Neves)

  • #2615 Ahora las opciones de índice pueden tomar un nombre de base de datos específico si los índices solo deben existir en una base de datos distinta de la por defecto.

    class Band
      include Mongoid::Document
      index name: 1, { database: "another_db" }
    end
    
  • #2613 Los Procs ahora se pueden proporcionar como valores para store_in:

    class Band
      include Mongoid::Document
      store_in database: ->{ Thread.current[:database] }
    end
    
  • #2609 Transmitir la opción batch_size a la query. (Martin Mauch)

  • #2555 ahora pasar hashes a find cuando el id de los documentos es de tipo hash funciona correctamente. (Szymon Kurcab)

  • #2545 El operador posicional $ se usa para selectores de actualizar en documentos incrustados que están anidados a una profundidad de 1 niveles, cuando sea apropiado.

  • #2539 Mongoid.models ahora rastrea todos los modelos en la aplicación para determinar con mayor precisión los modelos en tareas como la indexación y las tareas de rastrillo. (Ara Howard)

  • #2525 Se añadió la capacidad de tener campos cortos con marcas de tiempo y alias. Esta configura los campos de marca de tiempo como c_at y u_at, que también se sub-alias como created_at y updated_at para mayor comodidad. (Rodrigo Saito)

    class Band
      include Mongoid::Document
      include Mongoid::Timestamps::Short # For c_at and u_at.
    end
    
    class Band
      include Mongoid::Document
      include Mongoid::Timestamps::Created::Short # For c_at only.
    end
    
    class Band
      include Mongoid::Document
      include Mongoid::Timestamps::Updated::Short # For u_at only.
    end
    
  • Los documentos de #2465 ahora tienen un attribute_before_type_cast para el manejo adecuado de las validaciones. (Gerad Suyderhoud)

  • #2443 expire_after_seconds ahora es una opción de índice válida (www.mongodb.com/es/docs/manual/core/indexes/#ttl-indexes, www.mongodb.com/es/docs/manual/tutorial/expire-data/).

    class Event
      include Mongoid::Document
      field :created_at, type: DateTime
      index({ created_at: 1 }, { expire_after_seconds: 3600 })
    end
    
  • #2373 Las relaciones con la opción touch: true ahora se verán afectadas automáticamente cuando se cree o destruya el documento secundario.

  • Se agregaron Document.first_or_create! y Criteria#first_or_create!. Esto genera un error de validación si la creación falla.

    Band.where(name: "Depeche Mode").first_or_create!
    Band.where(name: "Tool").first_or_create!(active: true)
    
  • Se añadieron Document.first_or_initialize y Criteria#first_or_initialize. Esto es lo mismo que first_or_create, pero inicializa un nuevo documento (no persistido) si no se encuentra ninguno.

    Band.where(name: "Depeche Mode").first_or_initialize
    Band.where(name: "Tool").first_or_initialize(active: true)
    
  • Se añadió Model.pluck y Criteria#pluck, similar a Active Record, que devuelve un arreglo de valores para el campo proporcionado. (Jason Lee)

    Band.where(name: "Depeche Mode").pluck(:_id)
    Band.where(name: "Tool").pluck(:likes)
    
  • #2324 Las incrustaciones de muchas relaciones ahora manejan correctamente delete_if.

  • #2317 Agregado Document.first_or_create y Criteria#first_or_create. Esto devolverá el primer documento coincidente o creará uno con atributos adicionales si no existe. (incorvia)

    Band.where(name: "Depeche Mode").first_or_create
    Band.where(name: "Tool").first_or_create(active: true)
    
  • #2292 Se agregó Model.each_with_index.

  • #2285 Config.load_configuration now is public for those who wish to instantiate settings directly from a hash.

  • #2275 Se añadió la tarea rake db:mongoid:purge que descartará todas las colecciones con excepción de las colecciones del sistema en la base de datos por defecto.

  • Se han añadido #2257 after_find devoluciones de llamada para cuando los documentos se devuelvan de la base de datos.

    class Band
      include Mongoid::Document
    
      after_find do |doc|
        # Some logic here.
      end
    end
    
  • #2223 Permitir encontrar documentos con JavaScript usando parámetros que están protegidos contra la inyección de JavaScript mediante Model.for_js.

    Band.for_js("this.name = param", param: "Tool")
    Band.where(:likes.gt => 1000).for_js("this.likes < this.follows")
    
  • #2197 Al proporcionar una configuración de sesión sin puertos, Mongoid ahora los establecerá de forma predeterminada en 27017.

  • #2180 Las relaciones de 1-n y n-n ahora soportan funciones de retorno antes/después de agregar/remover. (Rodrigo Saito)

    class Band
      include Mongoid::Document
    
      embeds_many :albums, after_add: :notify_labels
      has_many :followers, before_remove: ->(band, follower){ notify_unfollow(follower) }
    end
    
  • #2157 Criteria#update y Criteria#update_all ahora serializan valores de acuerdo a su tipo de campo, si se define un campo.

  • #2022 Los callbacks personalizados ahora pueden registrarse para su uso con observers usando la macro observable.

    class Band
      include Mongoid::Document
    
      define_model_callbacks :notification
      observable :notification
    end
    
    class BandObserver < Mongoid::Observer
    
      def before_notification(band)
        #...
      end
    
      def after_notification(band)
        #...
      end
    end
    
  • #1766 Las relaciones de muchos a muchos no tocarán la base de datos si la clave foránea es un arreglo vacío.

  • #1564 Las claves externas de muchos a muchos ahora tienen un conjunto por defecto de manera perezosa sólo si se ha accedido a la relación. Esto evita almacenar arreglos vacíos si la relación no ha sido modificada.

Problemas resueltos

  • #2730 Al llamar a sort en un contexto, se actualizan correctamente los criterios del contexto. (Arthur Neves)

  • #2719 distinct ya está disponible a nivel de clase.

    Band.distinct(:name)
    
  • #2714 Al anular sesiones cuando la nueva sesión tiene una base de datos diferente, también se cambiará correctamente la base de datos en tiempo de ejecución.

  • #2697 Se corrigió la carga ansiosa al incluir varios modelos que heredan de la misma clase. (Kirill Lazarev)

  • #2664 La ordenación en memoria de documentos incrustados ahora funciona correctamente cuando se proporcionan varios campos. (Neer Friedman)

3.0.24

Problemas resueltos

  • La función #2879 remove_attribute en los documentos nuevos ya no crea una operación $unset innecesaria.

3.0.23

Problemas resueltos

  • #2851 Se corrigió la desmongoización de valores NaN de BigDecimal. (nkem)

  • #2841 Llamar a delete_all o destroy_all sobre un embeds many cuando se está en medio de una actualización principal ahora ejecutará correctamente la eliminación. (Arthur Neves)

  • #2835 Se corrigió el borrado de opciones de persistencia en el validador de unicidad.

  • #2826 Los campos dinámicos ahora están correctamente mongoizados.

  • #2822 La carga Marshal de relaciones ahora vuelve a aplicar correctamente las extensiones.

  • #2821 Las relaciones autoguardadas deberían duplicarse en las clases heredadas.

3.0.22

Problemas resueltos

  • #2812 Se corrigieron los criterios en las relaciones muchos a muchos cuando el documento base se destruye y la clave foránea aún no se ha evaluado de forma diferida.

  • #2796 No propague cambios en relaciones has_many al asignar con un borrado.

  • #2795 Corregir la precisión en las conversiones de horas. (Tom de Bruijn)

  • #2794 No realice la compilación automática al leer una relación para validación.

  • #2790 becomes ahora copia documentos incrustados incluso si estaban protegidos por asignación masiva.

  • #2787 Permitir becomes para reemplazar el documento en el mapa de identidad.

  • #2786 Se corrigió el error en las devoluciones de llamada en cascada al destruir que no se activaban correctamente.

  • #2784 Se corrigió la validación de unicidad que se estaba agregando correctamente a las subclases. (Takeshi Akima)

3.0.21

Problemas resueltos

  • #2781 / * #2777 - Se solucionó un problema con la serialización de DateTime que solo estaba presente en entornos Rails.

3.0.20

Problemas resueltos

  • #2774 Asegúrese de que las macros de validación de unicidad, presencia y asociadas también estén disponibles en el nivel de instancia.

  • #2772 Los campos localizados ahora se gestionan correctamente al clonar un documento.

  • #2758 Mongoid.create_indexes no falla cuando no se puede constanteizar la clase. (Arthur Neves)

  • No se borran más las opciones de persistencia #2743 cuando se cargan las revisiones. (Arthur Neves)

  • #2741 Corrige errores de redondeo de microsegundos en el mongoization de tiempo en MRI y JRuby.

  • #2740 Admite claves enteras en campos hash cuando se utiliza read_attribute con notación de punto.

  • #2739 Asegúrese de que la deserialización de enteros se convierta correctamente en enteros.

  • #2733 Las relaciones de muchos a muchos con inverse_of: nil no persisten la relación inversa en << o push si el documento ya está persistido.

  • #2705 Lógica corregida sobre cuándo se pueden añadir niños a la lista de devoluciones de llamada en cascada.

3.0.19

Problemas resueltos

  • Liberado para revertir los cambios en #2703.

3.0.18

Problemas resueltos

  • #2707 Llamar a find_or_create_by o find_by_initialize_by para terminar una relación con un criterio o alcance en cadena ahora mantiene adecuadamente las relaciones intactas en el documento nuevo o encontrado.

  • #2699 Restablecer un campo ahora remueve el nombre de la lista de atributos modificados. (Subhash Bhushan)

  • Los campos con alias de2683 ahora están soportados al ejecutar operaciones atómicas a partir de criterios. (Arthur Neves)

  • #2678 Llamar a Criteria#sum sin documentos coincidentes devuelve 0 en lugar de nil.

  • Los2671 comparadores ahora gestionan correctamente las claves de símbolos. (Jonathan Hyman)

3.0.17

Problemas resueltos

  • #2686 Se corrigió la dependencia rota de Moped: la versión de Moped ahora debe ser al menos la 1.2.0.

3.0.16

Problemas resueltos

  • #2661 Implementar model_name a nivel de instancia para documentos.

  • #2651 Asegúrese de que Criteria#type funcione correctamente tanto con claves de símbolo como de string en el selector.

  • #2647 Garantiza que deleted? y destroyed? sobre documentos paranoicos retornen el mismo valor.

  • #2646 Establezca el documento descargado en la memoria en los destinos enumerables antes de ceder al bloque.

  • #2645 Tenga en cuenta el almacenamiento en caché al solicitar recuentos. (Arthur Nogueira Neves)

  • #2642 No agrupe los envíos de arreglos vacíos en documentos incrustados. (Laszlo Bacsi)

  • #2639 Evita consultas extras innecesarias en registros nuevos al construir relaciones a partir de ellos.

  • #2638 Cuando un criterio se carga con ansias, llamar a first o last y luego iterar todos los resultados correctamente carga con ansias la solicitud completa.

  • #2618 La validación de unicidad ahora utiliza siempre la coherencia de strings por defecto.

  • #2564 Se corrigió la recursión infinita para los casos en los que se sobrescribía un getter de relación y se llamaba al setter desde ese método.

  • #2554 Asegúrese de que unscoped en una embeds_many no incluya documentos señalados para destrucción.

3.0.15

Problemas resueltos

  • #2630 Corregir la cascada cuando los metadatos existen pero no se ha definido la cascada.

  • #2625 Corrige Marshal.dump y Marshal.load de los objetos proxy y de criterios.

  • #2619 Se corrigieron las clases devueltas por observed_classes en un observador cuando observa modelos personalizados.

  • Los errores #2612 DocumentNotFound ahora exponen la clase en la instancia del error.

  • #2610 Asegúrese de que llamar a first después de un last que tenía opciones de clasificación restablezca la clasificación.

  • #2604 Chequea los pulls y pushes para detectar actualizaciones en conflicto. (Lucas Souza)

  • #2600 Instancie el tipo de clase adecuado para los atributos cuando utilice atributos de múltiples parámetros. (xxswingxx)

  • #2598 Se corrigió la clasificación en campos localizados con Docs incrustados.

  • #2588 Bloque que define métodos para atributos dinámicos que serían métodos Ruby no válidos. (Matt Sanford)

  • #2587 Se corrige el conflicto de métodos con los servidores proxy belongs_to al restablecer los criterios de relación descargados.

  • #2585 Asegúrate de que las opciones de configuración de la sesión se pasen a Moped como símbolos.

  • #2584 Permitir que map/reduce opere en secundarios si la salida está configurada en inline.

  • #2582 Asegúrate de que la anulación de sesión nil nunca pueda causar el acceso a una sesión con el nombre nil.

  • 2581 Usa coherencia fuerte al recargar documentos. (Mark Kremer)

3.0.14

Problemas resueltos

  • #2575 Evita que los horarios de fin de mes se redondeen hacia arriba, ya que los flotantes no son lo suficientemente precisos para manejar el uso. (Steve Valaitis)

  • #2573 No usar i18n para mensajes de inspección.

  • #2571 Remover mensaje de error en blanco de las localizaciones. (Jordan Elver)

  • #2568 Corregir la validación de unicidad para campos localizados cuando también se proporciona un alcance.

  • #2552 Garantiza que se generen errores InvalidPath al intentar obtener rutas desde un selector raíz en documentos incrustados.

3.0.13

Problemas resueltos

  • #2548 Corregir error al generar el archivo de configuración con una nueva aplicación con Unicorn en el gemset.

3.0.12

Problemas resueltos

  • #2542 Permitir que los documentos incrustados que utilicen store_as se distingan de manera adecuada en los criterios.

  • #2541 Asegúrese de que el cambio de tipo sea correcto al subir/bajar de tipo un documento a través de Document#becomes (Łukasz Bandzarewicz)

  • #2529 Los campos en subclases que anulan campos en la clase principal donde ambos tienen valores predeterminados con procedimientos ahora anulan correctamente el valor predeterminado en la subclase.

  • #2528 Los campos con alias deben duplicarse cuando se heredan subclases.

  • #2527 Asegúrese de que la eliminación de documentos en un has_many realice una actualización múltiple cuando se configura en una matriz vacía.

3.0.11

Problemas resueltos

  • #2522 Se corrigió Criteria#with para devolver los criterios y no la clase.

  • #2518 Corregir la llamada de unidad de trabajo para el mapa de identidad cuando se utiliza Passenger.

  • #2512 Asegúrese de que la destrucción de atributos anidados funcione con las destrucciones retrasadas introducidas en 3.0.10 cuando hay varios niveles de profundidad.

  • #2509 No se debe presionar el mapa de identidad una vez más cuando el valor devuelto es un hash vacío. (Douwe Maan)

3.0.10

Problemas resueltos

  • #2507 Asegúrese de que no haya golpes extra a la base de datos (db hits) cuando la carga ansiosa (eager loading) tenga una combinación de padres con y sin docs. (Douwe Maan)

  • #2505 Asegúrate de que update y update_all entre los criterios gestionen adecuadamente los campos con alias. (Dmitry Krasnoukhov)

  • #2504 Model#becomes mantiene correctamente la misma ID.

  • #2498 Los criterios ahora pasan correctamente los bloques proporcionados a través de method_missing.

  • #2496 Los documentos incrustados que se almacenaron anteriormente sin identificadores ahora se actualizan correctamente y se les asignan identificadores desde dentro de Mongoid.

  • #2494 Todas las operaciones atómicas explícitas ahora respetan correctamente los campos con alias.

  • #2493 Usa Class#name en lugar de Class#model_name cuando configures tipos polimórficos en caso de que model_name haya sido anulado.

  • #2491 Se eliminó la llamada de fusión innecesaria en hijos en cascada.

  • #2485 Remover índices ahora siempre utiliza coherencia fuerte.

  • #2483 La administración de versiones ahora gestiona los campos localizados. (Lawrence Curtis)

  • Los parámetros para la búsqueda del almacenar #2482 se encuentran en el error DocumentNotFound.

  • #2481 Las agregaciones de map-reduce ahora gestionan adecuadamente el agrupamiento de tareas de reducción en Mongo en lotes de 100, con el estado transmitido junto con el conteo.

  • #2476 Maneje los saltos y límites fuera del rango en las relaciones embeds_many de manera elegante.

  • #2474 Desvincula correctamente las relaciones 1-1 cuando el hijo aún no está cargado. (Kostyantyn Stepanyuk)

  • #2451 relation.deleted en documentos paranoicos incrustados ahora vuelve a funcionar correctamente.

  • #2472 Asegúrese de que update_all en relaciones embebidas funciona correctamente cuando en realidad no se va a actualizar nada.

  • #2469 Los documentos anulados sobre relaciones ahora pueden volver a agregarse con la misma instancia en memoria.

  • 2454 Model#as_document permite correctamente cambios respecto a tener una relación y la eliminación de la relación. (James Almond)

  • #2445 El middleware Mongoid ahora admite correctamente tanto las respuestas normales como las transmitidas y borra correctamente el mapa de identidad para ambos.

  • #2367 Los documentos incrustados que se eliminan mediante atributos anidados ya no se eliminan inmediatamente de la relación si falla la validación principal. En su lugar, se marcan para su destrucción y la eliminación se produce cuando el documento principal supera la validación y persiste.

Ten en cuenta que este es un cambio de comportamiento, pero como la API no cambia y el comportamiento anterior era incorrecto y no coincidía con AR, se pudo incluir en una versión puntual.

3.0.9

Problemas resueltos

  • #2463 Se ha corregido el error en rails g mongoid:config desde un nuevo repositorio.

  • #2456 La caché de descendientes ahora se restablece cuando se vuelve a heredar el documento. (Kostyantyn Stepanyuk)

  • #2453 Model#write_attribute ahora funcionan correctamente con campos con alias. (Campbell Allen)

  • #2444 Se eliminó la llamada a la creación de métodos sucios adicionales. (Kostyantyn Stepanyuk)

  • #2440/#2435 Pasa las opciones de asignación masiva a los hijos al establecer mediante atributos anidados o documentos incrustados.

  • #2439 Se corrigió una pérdida de memoria en la selección en cadena de campos devueltos. (Tim Olsen)

  • mongoid/moped#82 Los campos con alias ahora funcionan con Criteria#distinct.

  • #2423 Se corrigió el update_all del documento incrustado para realizar el $set correcto cuando se utiliza con un criterio.

  • Las definiciones de índice de #2414 ahora respetan los campos con alias.

  • #2413 Los objetivos enumerables ahora devuelven correctamente enumeradores cuando no se proporcionan bloques. (Andrew Smith)

  • #2411 Los campos BigDecimal se almacenan correctamente como cadenas cuando se convierten números enteros y flotantes en mongo.

  • #2409 No avisar sobre la falta de mongoid.yml si se ha configurado por programación.

  • #2403 Devuelve falso en update_all de muchas incrustaciones sin documentos.

  • #2401 traer de vuelta la capacidad de fusionar un criterio con un hash.

  • #2399 Rechazar valores en blanco de id en has_many Model#object_ids=. (Tiago Rafael Godinho)

  • #2393 Garantiza que se respete inverse_of al utilizar relaciones polimórficas.

  • #2388 Map/reduce utiliza de manera adecuada sort en lugar de orderby en la ejecución del comando. (Alex Tsibulya)

  • #2386 Permitir parámetros geo haystack y bits en índices. (Bradley Rees)

  • #2380 Model#becomes ahora copia correctamente los atributos sucios.

  • #2331 No double el envío de documentos secundarios cuando se realicen guardados extra en una función de retorno after_create.

3.0.8 (eliminado)

3.0.6

Problemas resueltos

  • #2375 El alcance de la validación de unicidad ahora funciona con campos con alias.

  • #2372 Asegúrese de que todas las operaciones atómicas conviertan valores a formato Mongo antes de la ejecución.

  • Ahora, los documentos paranoicos #2370 no se borran correctamente al usar dependent: :restrict y se produce una excepción.

  • #2365 No hacer nada al intentar reemplazar un embeds_one con el mismo documento.

  • #2362 No almacene valores inversos de los campos en la base de datos cuando no sean necesarios. (Cuando no hay más de un padre polimórfico definido en la misma clase).

  • #2360 Al clonar documentos se deben ignorar las reglas de protección de asignación masiva.

  • #2356 Al limitar los campos devueltos en las consultas a través de only, asegúrese de que la limitación se limite al modelo.

  • #2353 Permitir que update_attribute gestione adecuadamente los campos con alias.

  • #2348 La conversión de cadenas a horas debería generar un error de argumento si la cadena no es válida. (Campbell Allen)

  • #2346 Asegúrese de que las relaciones belongs_to puedan evolucionar cuando se pasan al proxy y no al documento.

  • #2334 Se corrigió la agregación map/reduce cuando a veces los campos no existían. (James McKinney)

  • #2330 Se corrigió la inconsistencia de #size y #length en criterios cuando los documentos han sido iterados con un límite aplicado.

  • #2328 Asegúrese de que el orden se aplique a todos los criterios de relación, si están definidos.

  • #2327 No ejecute callbacks desde el documento base si el documento no puede ejecutarlos.

  • #2318 Asegúrate de que la configuración de cualquier valor numérico en un campo Flotante lo establezca realmente como un flotante, incluso si el número proporcionado es un entero.

3.0.5

Problemas resueltos

  • #2313 Se arregló la deserialización de los campos nil TimeWithZone. (nagachika)

  • #2311 Document#changes ya no devuelve valores nil para los campos Array y Hash a los que solo se accedió y que no cambiaron. Regresión de 2.4.x.

  • #2310 Al configurar un duplicado de muchos a muchos de forma sucesiva en la memoria, ya no se borran los claves ajenas inversas.

  • #2309 Permitir que las relaciones de embeds_one se establezcan con hashes más allá del conjunto inicial.

  • #2308 Asegúrate de que los documentos recuperados mediante #find en relaciones has_many y has_and_belongs_to_many se mantengan en memoria.

  • #2304 Los ámbitos predeterminados ahora se fusionan correctamente en lugar de sobrescribirse cuando se define más de uno, según lo previsto con AR. (Kirill Maksimov)

  • #2300 Asegúrate de que al recargar se refresque el documento en el mapa de identidad.

  • #2298 Protección contra relaciones de muchos a muchos que extraen un conjunto nulo de identificadores. (Jonathan Hyman)

  • #2291 Se corrigieron las operaciones táctiles solo para actualizar la marca de tiempo y el campo opcional, sin importar cuáles sean los otros cambios en el documento.

  • #1091 Permitir que la validación de presencia pase si el valor es false.

3.0.4

Problemas resueltos

  • #2280 Solucionar la sincronización de las relaciones de muchos a muchos cuando existe un ámbito de ordenación por defecto en cualquiera de los lados de la asociación.

  • #2278 Criteria#update ahora actualiza correctamente solo el primer documento coincidente, donde Criteria#update_all actualizará todos los documentos coincidentes. (sin bandera vs. multi).

  • #2274 Al cargar modelos, avisa si surge un error pero continúa el procesamiento.

  • #2272 No remueva los selectores ni las opciones al remover el ámbito por defecto para valores realmente nulos. También debe comprobar si la clave existe.

  • #2266 Los documentos paranoicos restaurados ya no se marcan como destruidos. (Mario Uher)

  • #2263 Garantizar que la conversión de claves externas de ID no objeto en relaciones muchos a muchos ocurra en el conjunto inicial, no en el momento de la validación.

3.0.3

Problemas resueltos

  • #2259 Asegúrese de que los documentos subclasificados no se puedan extraer del mapa de identidad a través de una identificación de otro documento en la misma colección con un tipo padre o similar.

  • #2254 las operaciones $inc ya no convierten todos los valores a coma flotante.

  • #2252 No se active el autoguardado cuando los callbacks previos no hayan finalizado.

  • #2248 Mejoró el rendimiento de exists? en los criterios y relaciones. (Jonathan Hyman)

3.0.2

Problemas resueltos

  • #2244 Eliminar las advertencias de asignación masiva de ID en atributos anidados.

  • #2242 Se soluciona la carga ansiosa para que no se carguen todos los documentos cuando se llama primero o último.

  • #2241 Las operaciones de Map/reduce ahora siempre utilizan coherencia fuerte, ya que tienen el potencial de escribir en colecciones la mayoría de las veces.

  • 12238 Asegúrese de que los campos de clave externa N-N estén marcados como redimensionables para evitar nil ->[] cambios al usar #only y al actualizar.

  • #2236 Mantén la instancia del documento en la excepción de validaciones accesible a través de document o record.

  • #2234 Asegúrate de que las validaciones al guardar un documento con opciones personalizadas funcionen correctamente y que no se borren si la validación es exitosa.

  • #2224 Model#inc ahora acepta BigDecimal valores.

  • #2216 Asignación fija de metadatos en embeddings one relations al establecer varias veces seguidas.

  • #2212 Asegúrese de que los errores se eliminen después de guardar con validate: false en todas las situaciones.

  • #2207 Al realizar una carga anticipada de id, la query debe duplicarse para evitar problemas de iteración múltiple y no obtener los campos requeridos.

  • #2204 Genera un error InvalidIncludes al pasar argumentos a Criteria.includes que no son válidos (no son relaciones o tienen un nivel superior al 1).

  • #2203 Map/Reduce ahora funciona correctamente en conjunto con Model#with.

    Band.
      with(session: "secondary").
      where(:likes.gt => 100).
      map_reduce(map, reduce).
      out(inline: 1)
    
  • #2199 Ahora se respeta el autoguardado falso al agregar automáticamente la validación de presencia. (John Nishinaga)

3.0.1

Problemas resueltos

  • 2191 Garantiza la visibilidad adecuada (privada) para los métodos de generación de mensajes de error.

  • #2187 Asegúrese de que todos los niveles de documentos anidados se serialicen en JSON.

  • #2184 Permitir que los nombres de relaciones que entran en conflicto con los métodos del núcleo Ruby pasen las verificaciones de existencia.

  • #2181 Garantizar que los criterios .first se ordenen por identificadores ascendentemente, si no se proporcionan otros criterios de ordenación.

3.0.0

Nuevas características:

  • #2151 Cuando se solicitan metadatos antes de la persistencia, Mongoid ahora genera un error Mongoid::Errors::NoMetadata si los metadatos no están presentes.

  • #2147 Model#becomes ahora copia los documentos incrustados.

  • Se ha introducido una nueva función de retorno: upsert, que se ejecuta al llamar a document.upsert ya que Mongoid no sabe si el documento debe tratarse como nuevo o persistente. Con esto vienen las devoluciones de llamada del modelo:

    before_upsert
    after_upsert
    around_upsert
    
  • #2080/#2087 Se puede sobrescribir globalmente la base de datos o sesión a la que Mongoid persiste en casos donde Model#with no es una opción viable.

    Mongoid.override_database(:secondary)
    Mongoid.override_session(:secondary)
    
    Band.create(name: "Placebo") #=> Persists to secondary.
    band.albums.create #=> Persists to secondary.
    

    Ten en cuenta que esta opción es global y anula todos los modelos en el hilo actual. Es responsabilidad del desarrollador recordar volver a establecer esto en nil si ya no desea que se produzca la anulación.

    Mongoid.override_database(nil)
    Mongoid.override_session(nil)
    
  • #1989 Los criterios count, size y length ahora se comportan como Active Record con respecto al acceso a la base de datos.

    Criteria#count Siempre accederá a la base de datos para obtener el recuento.

    Criteria#length y Criteria#size accederá a la base de datos una vez si los criterios no se han cargado, y las llamadas posteriores devolverán el valor en caché.

    Si se ha iterado o cargado sobre los criterios, length y size nunca impactarán en la base de datos.

  • #1976 La carga ansiosa ya no produce consultas cuando la consulta base devuelve cero resultados.

  • Model.find_by ahora acepta un bloque y cederá al documento encontrado si no es nulo.

    Band.find_by(name: "Depeche Mode") do |band|
      band.likes = 100
    end
    
  • #1958/#1798 Documentos y belongs_to las relaciones ahora soportan acciones touch.

    class Band
      include Mongoid::Document
      include Mongoid::Timestamps::Updated
      belongs_to :label, touch: true
    end
    

    Actualice la marca de tiempo del documento updated_at a la hora actual. Esto también actualizará la marca de tiempo de cualquier relación editable.

    Band.first.touch
    

    Actualice un campo de tiempo específico junto con udpated_at.

    Band.first.touch(:founded)
    

    Esto no activa validaciones ni devoluciones de llamadas.

  • Mongoid ahora admite el comando $findAndModify de MongoDB.

    Band.find_and_modify("$inc" => { likes: 1 })
    
    Band.desc(:name).only(:name).find_and_modify(
      { "$inc" => { likes: 1 }}, new: true
    )
    
  • #1906 Mongoid recuperará documentos del mapa de identidad cuando se proporcionen múltiples ids para buscar. (Hans Hasselberg)

  • #1903 Mongoid genera un error si se proporciona una expresión de javascript en una cláusula where en una colección anidada. (Sebastien Azimi)

  • Las agregaciones ahora se adhieren tanto a una API de Mongoid como a sus contrapartes enumerables cuando corresponda.

    Band.min(:likes)
    Band.min do |a, b|
      a.likes <=> b.likes
    end
    
    Band.max(:likes)
    Band.max do |a, b|
      a.likes <=> b.likes
    end
    

    Ten en cuenta que al proporcionar un nombre de campo y ningún bloque, se devolverá un solo valor numérico, pero al proporcionar un bloque, se devolverá un documento que contiene el valor mínimo/máximo. Esto se debe a que la API Enumerable de Ruby dicta que al proporcionar un bloque, se devuelve el elemento coincidente.

    Al proporcionar un bloque, todos los documentos se cargarán en la memoria. Al proporcionar un símbolo, la ejecución se realiza mediante map/reduce en el servidor.

  • Ahora se proporciona un método de agregación de todo tipo de datos, para obtener todo en una única llamada a un campo.

    Band.aggregates(:likes)
    # =>
    #   {
    #     "count" => 2.0,
    #     "max" => 1000.0,
    #     "min" => 500.0,
    #     "sum" => 1500.0,
    #     "avg" => 750.0
    #   }
    
  • Ahora se proporciona una API DSL fuera de los criterios para operaciones de mapeo/reducción para mayor comodidad.

    Band.where(name: "Tool").map_reduce(map, reduce).out(inline: 1)
    Band.map_reduce(map, reduce).out(replace: "coll-name")
    Band.map_reduce(map, reduce).out(inline: 1).finalize(finalize)
    
  • Mongoid ahora usa Origin para su API de criterios. Consulta el repo de Origin y la documentación de la API para obtener la documentación.

  • #1861 Mongoid ahora genera un error AmbiguousRelationship cuando no puede determinar la inversa de una relación y hay varios candidatos potenciales. (Hans Hasselberg)

  • Ahora puedes realizar un explain directamente desde los criterios.

    Band.where(name: "Depeche Mode").explain
    
  • #1856 La inserción en relaciones de uno a muchos ahora se puede encadenar.

    band.albums.push(undertow).push(aenima)
    
  • En la versión #1842, MultiParameterAttributes ahora admite campos con alias. (Anton Orel)

  • #1833 Si se intenta guardar un documento incrustado sin definir un padre, Mongoid ahora generará una excepción Mongoid::Errors::NoParent.

  • Se ha añadido una forma agnóstica de ORM para obtener los nombres de los campos

    class Band
      include Mongoid::Document
      field :name, type: String
    end
    
    Band.attribute_names
    
  • #1831 find_or_create_by en relaciones ahora acepta opciones de tipado y asignación masiva. (Tatsuya Ono)

    class Band
      include Mongoid::Document
      embeds_many :albums
    end
    
    band.albums.find_or_create_by({ name: "101" }, LP)
    
  • #1818 Añadir la capacidad de elegir la clave donde se almacena tu embeds_many relación. (Cyril Mougel)

    class User
      include Mongoid::Document
      field :name, type: String
      embeds_many :prefs, class_name: "Preference", store_as: 'my_preferences'
    end
    
    user.prefs.build(value: "ok")
    user.save
    # document saves in MongoDB as:
    # { "name" => "foo", "my_preferences" => [{ "value" => "ok" }]}
    
  • Ahora, 1806 Model.find_or_create_by y Model.find_or_initialize_by pueden tomar documentos como parámetros para relaciones belongs_to.

    person = Person.first
    Game.find_or_create_by(person: person)
    
  • #1774 Las relaciones ahora tienen una opción :restrict para las relaciones dependientes, que generará un error al intentar borrar un elemento principal que aún tiene elementos secundarios. (Hans Hasselberg)

    class Band
      include Mongoid::Document
      has_many :albums, dependent: :restrict
    end
    
    band = Band.first
    band.albums << Albums.first
    band.delete # Raises DeleteRestriction error.
    
  • #1764 Agregue un método para verificar si el campo difiere del valor predeterminado.

    class Band
      include Mongoid::Document
      field :name, type: String, default: "New"
    end
    
    band = Band.first
    band.name_changed_from_default?
    
  • Se han actualizado los mensajes de error de campos inválidos de #1759 para mostrar la fuente y la ubicación del método original. El nuevo mensaje es:

    Problem:
      Defining a field named 'crazy_method' is not allowed.
    Summary:
      Defining this field would override the method 'crazy_method',
      which would cause issues with expectations around the original
      method and cause extremely hard to debug issues.
      The original method was defined in:
        Object: MyModule
        File: /path/to/my/module.rb
        Line: 8
    Resolution:
      Use Mongoid.destructive_fields to see what names are
      not allowed, and don't use these names. These include names
      that also conflict with core Ruby methods on Object, Module,
      Enumerable, or included gems that inject methods into these
      or Mongoid internals.
    
  • #1753/#1649 Ahora se proporciona un establecedor y un obtenedor para tener muchas relaciones para establecer sus hijos. (Piotr Jakubowski)

    class Album
      include Mongoid::Document
      has_many :engineers
    end
    
    class Engineer
      include Mongoid::Document
      belongs_to :album
    end
    
    album = Album.first
    engineer = Engineer.first
    album.engineer_ids = [ engineer.id ]
    album.engineer_ids # Returns the ids of the engineers.
    
  • #1741 Mongoid ahora proporciona una tarea de rake para forzar la eliminación de índices en entornos donde Mongoid gestiona las definiciones de índices y la eliminación debe ser automatizada. (Hans Hasselberg)

    rake db:force_remove_indexes
    rake db:mongoid:force_remove_indexes
    
  • #1726 Mongoid.load! ahora acepta un segundo argumento opcional para el entorno a cargar. Esto tiene prioridad sobre cualquier variable de entorno que se establezca si se proporciona.

    Mongoid.load!("/path/to/mongoid.yml", :development)
    
  • #1724 Mongoid ahora admite campos regex.

    class Rule
      include Mongoid::Document
      field :pattern, type: Regexp, default: /[^abc]/
    end
    
  • #1714/#1706 Se ha mejorado el registro en la creación de índices. (Hans Hasselberg)

    Cuando hay un índice presente en un modelo orientado a documentos raíz:

    Creating indexes on: Model for: name, dob.
    

    Cuando se define un índice en un modelo embebido:

    Index ignored on: Address, please define in the root model.
    

    Cuando no se define ningún índice, no se registra nada y si se define un índice no válido se genera un error.

  • #1710 Para los casos en los que no desea que Mongoid proteja automáticamente los atributos id y type, puede establecer una opción de configuración para desactivar esto.

    Mongoid.protect_sensitive_fields = false
    
  • #1685 Pertenece a relaciones que ahora tienen métodos build_ y create_.

    class Comment
      include Mongoid::Document
      belongs_to :user
    end
    
    comment = Comment.new
    comment.build_user # Build a new user object
    comment.create_user # Create a new user object
    
  • #1684 Se generará un Mongoid::Errors::InverseNotFound al intentar establecer un hijo en una relación sin las definiciones adecuadas de inverse_of debido a que Mongoid no puede determinarlo.

    class Car
      include Mongoid::Document
      embeds_one :engine, class_name: "Motor"
    end
    
    class Motor
      include Mongoid::Document
      embedded_in :machine, class_name: "Car"
    end
    
    car = Car.new
    car.engine = Motor.new # raises an InverseNotFound error.
    
  • #1680 Las relaciones polimórficas ahora utilizan claves *_type en las consultas de búsqueda.

    class User
      include Mongoid::Document
      has_many :comments, as: :commentable
    end
    
    class Comment
      include Mongoid::Document
      belongs_to :commentable, polymorphic: true
    end
    
    user = User.find(id)
    user.comments # Uses user.id and type "User" in the query.
    
  • 1677 Ya está disponible la compatibilidad con relaciones polimorfas separables de padre a la misma clase principal. Esto solo funciona si se configura del lado del padre para saber a qué relación pertenecen los hijos. (Douwe Maan)

    class Face
      include Mongoid::Document
      has_one :left_eye, class_name: "Eye", as: :visible
      has_one :right_eye, class_name: "Eye", as: :visible
    end
    
    class Eye
      include Mongoid::Document
      belongs_to :visible, polymorphic: true
    end
    
    face = Face.new
    right_eye = Eye.new
    left_eye = Eye.new
    face.right_eye = right_eye
    face.left_eye = left_eye
    right_eye.visible = face # Will raise an error.
    
  • #1650 objetos que responden a to_criteria ahora se pueden fusionar con los objetos de criterios existentes.

    class Filter
      def to_criteria
        # return a Criteria object.
      end
    end
    
    criteria = Person.where(title: "Sir")
    criteria.merge(filter)
    
  • #1635 Ahora todas las excepciones proporcionan errores más completos, incluyendo el problema que se produjo, un resumen detallado del motivo que lo originó y posibles soluciones. ejemplo:

    (Mongoid::Errors::DocumentNotFound)
    Problem:
      Document not found for class Town with
      id(s) [BSON::ObjectId('4f35781b8ad54812e1000001')].
    Summary:
      When calling Town.find with an id or array of ids,
      each parameter must match a document in the database
      or this error will be raised.
    Resolution:
      Search for an id that is in the database or set the
      Mongoid.raise_not_found_error configuration option to
      false, which will cause a nil to be returned instead
      of raising this error.
    
  • Se agregó #1616 Model.find_by, que toma un hash de argumentos para buscar en la base de datos. Si no se devuelve ningún documento, se genera un error DocumentNotFound. (Piotr Jakubowski)

    Band.find_by(name: "Depeche Mode")
    
  • #1606 Mongoid ahora habilita el autoguardado, similar a Active Record, al añadir un accepts_nested_attributes_for en una relación.

    class Band
      include Mongoid::Document
      has_many :albums
      accepts_nested_attributes_for :albums # This enables the autosave.
    end
    
  • #1477 Mongoid ahora protege automáticamente los atributos id y tipo contra la asignación masiva. Puedes anular esto (no recomendado) redefiniéndolos como accesibles.

    class Band
      include Mongoid::Document
      attr_accessible :id, :_id, :_type
    end
    
  • #1459 El mapa de identidad se puede desactivar ahora para la ejecución específica de código pasando opciones a la unidad de trabajo.

    Mongoid.unit_of_work(disable: :all) do
      # Disables the identity map on all threads for the block.
    end
    
    Mongoid.unit_of_work(disable: :current) do
      # Disables the identity map on the current thread for the block.
    end
    
    Mongoid.unit_of_work do
      # Business as usual.
    end
    
  • #1355 Ahora las asociaciones pueden tener opciones de seguridad en operaciones de persistencia de documentos únicos.

    band.albums.with(safe: true).push(album)
    band.albums.with(safe: true).create(name: "Smiths")
    
    album.with(safe: true).create_producer(name: "Flood")
    
  • #1348 Carga ansiosa ahora es compatible con relaciones Muchos a muchos.

  • #1292 Eliminar atributo ahora anula el atributo cuando se guarda el documento en lugar de establecerlo en nulo.

    band = Band.find(id)
    band.remove_attribute(:label) # Uses $unset when the document is saved.
    
  • #1291 Las sesiones de base de datos de Mongoid ahora se conectan de forma diferida y son completamente seguras para subprocesos. Si se crea un nuevo subproceso, se creará una nueva sesión de base de datos para él.

  • #1291 Mongoid ahora admite cualquier número de conexiones de base de datos según lo definido en el archivo mongoid.yml. Por ejemplo, podrías tener una base de datos local de servidor único, un set de réplicas en varias zonas de disponibilidad y un clúster particionado, todo en el mismo entorno de aplicación. Mongoid puede conectarse a cualquier sesión en cualquier punto.

  • #1291 Mongoid ahora le permite persistir en cualquier base de datos o colección que desee en tiempo de ejecución, en función de cada consulta o operación de persistencia mediante el uso de with.

    Band.with(collection: "artists").create(name: "Depeche Mode")
    band.with(database: "secondary).save!
    Band.with(collection: "artists").where(name: "Depeche Mode")
    
  • #1291 Ahora puedes configurar, por modelo, dónde se almacenan sus documentos con la macro store_in nueva y mejorada.

    class Band
      include Mongoid::Document
      store_in collection: "artists", database: "secondary", session: "replica"
    end
    

    Por supuesto, esto se puede anular en tiempo de ejecución a través del método with.

  • #1212 documentos incrustados ahora pueden ser extraídos de una relación con persistencia.

    band.albums.pop # Pop 1 document and persist the removal.
    band.albums.pop(3) # Pop 3 documents and persist the removal.
    
  • #1188 Las relaciones ahora tienen predicados de existencia para verificar de forma simplificada si la relación está en blanco o no. (Andy Morris)

    class Band
      include Mongoid::Document
      embeds_many :albums
      embeds_one :label
    end
    
    band = Band.new
    band.albums?
    band.has_albums?
    band.label?
    band.has_label?
    
  • Las relaciones1188 1-1 ahora tienen la opción :autobuild para indicar si la relación debe generarse automáticamente con atributos vacíos al acceder a ella cuando la relación no existe. Funciona con embeds_one, embedded_in, has_one y belong_to. (Andy Morris)

    class Band
      include Mongoid::Document
      has_one :label, autobuild: true
    end
    
    band = Band.new
    band.label # Returns a new label with empty attributes.
    

    Al utilizar comprobaciones de existencia, la construcción automática no se ejecutará.

    band = Band.new
    band.label? # Returns false, does not autobuild on a check.
    band.has_label? # Returns false, does not autobuild on a check.
    
  • #1081 Mongoid indexa tanto el id como el tipo como un índice compuesto al proporcionar index: true a un belongs_to polimórfico.

    class Comment
      include Mongoid::Document
    
      # Indexes commentable_id and commentable_type as a compound index.
      belongs_to :commentable, polymorphic: true, index: true
    end
    
  • #1053 Elevar un Mongoid::Errors::UnknownAttribute en lugar de ningún método al intentar establecer un campo que no está definido y permitir campos dinámicos es falso. (Cyril Mougel)

    Mongoid.allow_dynamic_fields = false
    
    class Person
      include Mongoid::Document
      field :title, type: String
    end
    
    Person.new.age = 50 # raises the UnknownAttribute error.
    
  • #772 Ahora se puede marcar los campos como solo lectura, permitiendo que sus valores se asignen únicamente cuando el documento sea nuevo.

    class Band
      include Mongoid::Document
      field :name, type: String
      field :genre, type: String
    
      attr_readonly :name, :genre
    end
    

    Los valores de solo lectura se ignoran cuando se intenta establecerlos en documentos persistentes, con la excepción de update_attribute y remove_attribute, donde se generarán errores.

    band = Band.create(name: "Depeche Mode")
    band.update_attribute(:name, "Smiths") # Raises ReadonlyAttribute error.
    band.remove_attribute(:name) # Raises ReadonlyAttribute error.
    

Cambios principales (incompatibles con versiones anteriores)

  • Las relaciones polimórficas no pueden tener IDs distintos de object ids. Esto se debe a que Mongoid no puede determinar de forma optimizada cómo almacenan sus ids las diferentes clases en el otro lado de la relación, pues potencialmente pueden ser todas distintas.

Esto no estaba permitido antes, pero en ninguna parte se decía explícitamente.

  • #2039 Al validar la presencia de una relación ahora se comprueba tanto la relación como el valor de la clave externa.

  • La sintaxis de indexación ha cambiado. El primer parámetro ahora es un hash de pares nombre/dirección, con un segundo parámetro hash opcional para opciones adicionales.

    Indexación normal con opciones, las direcciones son 1 o -1:

    class Band
      include Mongoid::Document
      field :name, type: String
    
      index({ name: 1 }, { unique: true, background: true })
    end
    

    La indexación geoespacial necesita "2d" como dirección.

    class Venue
      include Mongoid::Document
      field :location, type: Array
    
      index location: "2d"
    end
    
  • Se han renovado los campos serializables personalizados. Tu objeto ya no debe incluir Mongoid::Fields::Serializable; en lugar de esto, solo necesita implementar los métodos 3: #mongoize, .demongoize y .evolve.

    #mongoize es un método de instancia que transforma tu objeto en un valor compatible con mongo.

    .demongoize es un método de clase, que puede tomar algunos datos de mongo e instanciar un objeto de tu tipo personalizado.

    .evolve es un método de clase, que puede tomar cualquier objeto y transformarlo para su uso en un Mongoid::Criteria.

    Un ejemplo de una implementación de esto para Range:

    class Range
    
      def mongoize
        { "min" => first, "max" => last }
      end
    
      class << self
    
        def demongoize(object)
          Range.new(object["min"], object["max"])
        end
    
        def evolve(object)
          { "$gte" => object.first, "$lte" => object.last }
        end
      end
    end
    
  • Document#changes ya no es un hash con acceso indiferente.

  • after_initialize las funciones de retorno ya no se transfieren a los hijos si la opción está activada.

  • #1865 count en los contextos de memoria y mongo ahora se comportan exactamente igual que el count de Ruby en enumerable y pueden tomar un objeto o un bloque. Esto está optimizado en el contexto de mongo para que no se cargue todo en la memoria, a excepción del paso de un bloque.

    Band.where(name: "Tool").count
    Band.where(name: "Tool").count(tool) # redundant.
    Band.where(name: "Tool") do |doc|
      doc.likes > 0
    end
    

    Ten en cuenta que, aunque las firmas son las mismas tanto para los contextos de memoria como mongo, se recomienda que solo utilices la sintaxis de bloque para el contexto de memoria, ya que los documentos incrustados ya están cargados en la memoria.

    También tenga en cuenta que pasar un valor booleano para tener en cuenta skip y limit ya no es compatible, ya que esta no necesariamente es una funcionalidad útil.

  • Se ha eliminado la opción de configuración autocreate_indexes.

  • Model.defaults Ya no existe. Puedes obtener todos los valores predeterminados con una combinación de Model.pre_processed_defaults y Model.post_processed_defaults.

    Band.pre_processed_defaults
    Band.post_processed_defaults
    
  • Model.identity Se han eliminado Model.key y . Para los identificadores personalizados, los usuarios ahora deben anular el campo _id.

    Cuando el valor por defecto es un proc, el valor por defecto se aplica después de que se establecen todos los demás atributos.

    class Band
      include Mongoid::Document
      field :_id, type: String, default: ->{ name }
    end
    

    Para que el valor por defecto se aplique antes que otros atributos, configura :pre_processed en verdadero.

    class Band
      include Mongoid::Document
      field :_id,
        type: String,
        pre_processed: true,
        default: ->{ BSON::ObjectId.new.to_s }
    end
    
  • Las excepciones de aplicaciones personalizadas en varios idiomas se han eliminado, junto con la funcionalidad Mongoid.add_language.

  • Mongoid ya no admite 1.8. Solo se admiten MRI 1.9.3 y superiores, o JRuby 1.6 y superiores en modo 1.9.

  • #1734 Al buscar documentos vía Model.find con múltiples id, Mongoid lanzará un error si no se encuentran todos los id y te informará cuáles faltan. Anteriormente, solo se generaba un error si no se devolvía nada.

  • #1675 Añadir la validación de presencia a una relación ahora habilita el autoguardado. Esto garantiza que, cuando se guarda un nuevo objeto principal con un nuevo objeto secundario y se marca como válido, ambos se conserven para asegurar un estado correcto en la base de datos.

  • #1491 Asegura que las traducciones vacías devuelvan un hash vacío al acceder.

  • #1484 Model#has_attribute? ahora se comportan igual que Active Record.

  • #1471 Mongoid ya no elimina ningún nivel de precisión en los tiempos.

  • 1475 Por defecto, ahora se utiliza la zona horaria de active soporte en la serialización de tiempo si está definida.

  • #1342 Model.find y model.relation.find ahora solo admiten un solo ID o múltiples IDs. Se ha eliminado el primero/último/todos con un hash de condiciones.

  • #1291 El archivo mongoid.yml ha sido completamente renovado y al actualizar las aplicaciones existentes, te encontrarás con algunos encantadores errores de configuración específicos de Mongoid. Puedes volver a generar un nuevo mongoid.yml mediante la tarea rake existente, que está comentada en un grado extremo para ayudarte con todas las posibilidades de configuración.

  • #1291 Se ha eliminado la opción de configuración persist_in_safe_mode. Ahora debe especificar en el archivo mongoid.yml de una sesión de base de datos si debe persistir en modo seguro por defecto.

    production:
      sessions:
        default:
          database: my_app_prod
          hosts:
            - db.app.com:27018
            - db.app.com:27019
          options:
            consistency: :eventual
            safe: true
    
  • Se han eliminado #1291 safely y unsafely. Ahora, por favor, utiliza with para proporcionar opciones de modo seguro en tiempo de ejecución.

    Band.with(safe: true).create
    band.with(safe: { w: 3 }).save!
    Band.with(safe: false).create!
    
  • Los macros de relación #1270 se han cambiado para coincidir con sus equivalentes en AR: ahora solo existen :has_one, :has_many, :has_and_belongs_to_many y :belongs_to.

  • Se ha eliminado #1268 Model#new?, los desarrolladores ahora deben usar siempre Model#new_record?.

  • #1182 Ya no se requiere una recarga para actualizar una relación después de establecer el valor del campo de clave externa para ella. Observe que esto se comporta exactamente como Active Record.

    Si el ID está configurado pero el documento correspondiente no ha sido guardado, al acceder a la relación se obtendrán resultados vacíos.

    Si el ID está establecido y su documento se ha guardado, al acceder a la relación se devolverá el documento.

    Si el ID está configurado, pero el documento base no se guarda posteriormente, al recargar se devolverá el documento a su estado original.

  • #1093 Las estrategias de serialización de campos han cambiado en arreglo, Hash, Integer y booleano para ser más consistentes y coincidir con AR cuando corresponda.

    La serialización de matrices llama a Array.wrap(object) La serialización de hashes llama a Hash[object] (to_hash en el objeto) La serialización de números enteros siempre devuelve un int a través de to_i La serialización de valores booleanos tiene como valor predeterminado falso en lugar de nulo.

  • #933 :field.size se ha renombrado a :field.count en criterios para que $size no entre en conflicto con el método size de Symbol.

  • #829/#797 El código de alcance de Mongoid se ha reescrito completamente y ahora coincide con la API de Active Record. Con este cambio incompatible hacia atrás, algunos métodos han sido eliminados o renombrados.

    Los criterios#as_conditions y Criterios#fuse ya no existen.

    Criteria#merge ahora solo acepta otro objeto que responda a to_criteria.

    Criteria#merge! ahora fusiona otro objeto sin crear un nuevo objeto de criterios.

    Band.where(name: "Tool").merge!(criteria)
    

    Los ámbitos nombrados y los ámbitos por defecto ya no aceptan hashes como parámetros. A partir de ahora, solo se aceptarán criterios y procs que envuelvan criterios, y se generará un error si los argumentos son incorrectos.

    class Band
      include Mongoid::Document
    
      default_scope ->{ where(active: true) }
      scope :inactive, where(active: false)
      scope :invalid, where: { valid: false } # This will raise an error.
    end
    

    Se ha eliminado la macro 'named_scope', de ahora en adelante utilice únicamente 'scope'.

    Model.unscoped ahora acepta un bloque que no permitirá que se aplique el alcance predeterminado para ninguna llamada dentro del bloque.

    Band.unscoped do
      Band.scoped.where(name: "Ministry")
    end
    

    Model.scoped ahora toma opciones que se establecerán directamente en el hash de opciones de criterios.

    Band.scoped(skip: 10, limit: 20)
    
  • #463 Document#upsert ya no está como alias de Document#save y ahora ejecuta realmente un comando de inserción de MongoDB cuando se invoca. Si estabas usando este método antes y deseas el mismo comportamiento, por favor cámbiate a save.

    band = Band.new(name: "Tool")
    band.upsert #=> Inserts the document in the database.
    band.name = "Placebo"
    band.upsert #=> Updates the existing document.
    

Problemas resueltos

  • #2166 Criteria#from_map_or_db elimina la selección de tipo durante la carga ansiosa, ya que verificará si el tipo es correcto después.

  • #2129 Se corrigió la clasificación de todos los campos en incrustaciones de muchas relaciones.

  • #2124 se corrigió el alcance por defecto y se borró el alcance en documentos paranoicos.

  • #2122 Permitir que los documentos incrustados ordenen en campos booleanos.

  • #2119 Permitir que Criteria#update_all acepte operaciones atómicas y conjuntos normales.

  • #2118 No quites ninguna precisión durante las conversiones de DateTime a Time.

  • #2117 Asegurarse de que las relaciones "embeds one" tengan los callbacks ejecutados al usar atributos anidados.

  • #2110 Model#touch ahora funciona correctamente en documentos incrustados.

  • #2100 Permitir operaciones atómicas para que se ejecuten correctamente en documentos paranoicos que tengan un deleted_at establecido.

  • #2089 Permitir una separación adecuada de la mongoización y evolución con respecto a las claves foráneas.

  • #2088 Permitir que las búsquedas por ID de string se obtengan del mapa de identidad si los ID se almacenan como identificación de objetos.

  • #2085 Permitir la desmongoización de floats e ints a big decimals.

  • #2084 No encadenar si no existe metadatos.

  • #2078 Llamar a Model#clone o Model#dup ahora configura correctamente los atributos como no guardados.

  • #2070 Permitir que updated_at pueda ser reemplazado manualmente para nuevos documentos que también tengan un created_at.

  • #2041 No accedas varias veces a la base de datos tras una carga anticipada que no haya devuelto documentos.

  • #1997 Las devoluciones de llamada en cascada deberían poder detener la cadena de devoluciones de llamada al finalizar.

  • Ahora, #1972 added, loaded y unloaded pueden ser nombres de ámbito válidos en un documento que forma parte de una relación 1-n.

  • #1952/#1950 El comportamiento de #all_in en documentos incrustados ahora coincide correctamente con documentos raíz al pasar un arreglo vacío. (Hans Hasselberg)

  • #1941/#1939 Model.find_by ahora devuelve nil si el error no encontrado raise está establecido en falso. (Hans Hasselberg)

  • #1859/#1860 Model#remove_attribute ahora se desactiva correctamente en documentos incrustados. (Anton Onyshchenko)

  • #1852 Asegúrese de que no haya recursividad infinita en las funciones de retorno en cascada. (Ara Howard)

  • #1823 Relation#includes? ahora funciona correctamente con el mapa de identidades activado.

  • #1810 Model#changed? ya no retorna true cuando los campos hash y arreglo solo han sido accedidos.

  • #1876/#1782 Permitir la notación de puntos en las consultas de los criterios de 'embeds many'. (Cyril Mougel)

  • #1745 Se corrigió el borrado por lotes para funcionar dentro de la configuración del atributo.

  • #1718 Asegurarse de la coherencia de #first/#last en las relaciones: ahora siempre coinciden con el primero/último en la base de datos, pero da preferencia al primero en memoria.

  • #1692/#1376 Model#updateattributes y Model#update_attributes! ahora aceptan opciones de asignación. (Hans Hasselberg)

  • #1688/#1207 No se requiere espacio de nombres al proporcionar el nombre de clase en macros de relación dentro del espacio de nombres. (Hans Hasselberg)

  • #1665/#1672 Expandir criterios complejos en selectores de criterios anidados, como #matches. (Hans Hasselberg)

  • #1335 No agregue criterios de ordenación Id a first/last si ya hay opciones de ordenación en el criterio.

  • #1321 Muchos objetivos enumerables referenciados ahora están respaldados por hash, lo que evita duplicados de una manera más eficiente.

  • #1135 Los DateTimes ahora obtienen correctamente las zonas horarias al deserializar.

  • #1031 Mongoid ahora serializa los valores en campos de arreglo a sus valores adecuados compatibles con Mongo cuando es posible.

  • #685 Intentar utilizar versionado con documentos incrustados ahora generará una alerta de error adecuada para que el desarrollador sepa que esto no está permitido.

2.6.0

Nuevas características:

  • #2709 Se incorporó de nuevo la funcionalidad touch de Mongoid 3.

2.5.2

Problemas resueltos

  • #2502 Se corrigió la clave de caché para gestionar correctamente los casos en los que el documento no incluye Mongoid::Timestamps::Updated. (Arthur Nogueira Neves)

2.5.1

Problemas resueltos

  • #2492 Retroportar las mejoras de rendimiento y memoria con callbacks en cascada desde 3.0.0-estable.

  • #2464 Retroportar la corrección de atributos anidados para mantener muchas relaciones en memoria al actualizar atributos. (Chris Thompson)

2.5.0

Nuevas características:

  • Esta es una versión para dar soporte a Mongo y BSON gems 1.7.0 y superiores, y resuelve los problemas que mantenían los 2.4.x series locked below 1.6.2

2.4.12

Problemas resueltos

  • #2178 Asegúrese de que las devoluciones de llamadas de destrucción se ejecuten después del reemplazo de una relación de incrustaciones.

  • #2169 Permitir que los guardados pasen cuando los documentos se destruyen después del guardado en una función de retorno.

  • #2144 La validación de unicidad en documentos paranoicos ahora tiene un alcance adecuado.

  • #2127 No desvincule los padres de los documentos incrustados durante la eliminación de atributos anidados.

2.4.11

Problemas resueltos

  • Esta versión impone un límite en la versión del driver de mongo en 1.6.2 debido a cambios en la API Mongo::Connection.from_uri que ya no permiten opciones de conexión válidas.

  • #2040 Se ha corregido una interpolación incorrecta en la validación de la presencia de la localización.

  • #2038 Permitir que las relaciones inversas se determinen únicamente mediante claves externas si se definen en ambos lados, y no solo mediante una declaración inverse_of.

  • #2023 Permit lilizar la serialización de tipos dinámicos que entren en conflicto con los métodos principales de Ruby para que aún puedan serializarse.

  • La validación de presencia de #2008 debe consultar la base de datos para comprobar la validez si la relación en memoria está vacía.

  • #2006 Permitir excluir solo el campo _id después de ejecutar una llamada #only.

2.4.10

Problemas resueltos

  • #2003 No fallar en la generación de documentos cuando un documento incrustado se almacenó como nulo en la base de datos.

  • #1997 No elimine documentos incrustados paranoicos a través de atributos anidados cuando una devolución de llamada before_destroy devuelve falso.

  • #1994 dependent: :delete ahora solo accede a la base de datos una vez para las relaciones de uno a muchos y de muchos a muchos en lugar de una vez para cada documento.

  • #1987 No volver a insertar documentos en el mapa de identidad al cargar de manera anticipada dos veces dentro del mismo trabajo.

  • #1953 La validación de unicidad ahora funciona en campos localizados.

  • #1936 Permitir configurar documentos incrustados a n niveles con atomicidad sin modificaciones conflictivas cuando no se utilicen atributos anidados o los propios documentos en una llamada de actualización desde la matriz.

  • #1957/#1954 Asegúrete de que el nombre de la base de datos esté establecido con herencia. (Hans Hasselberg)

2.4.9

Problemas resueltos

  • #1943 Asegúrate de que la validación de la numericidad funcione correctamente para decimales grandes.

  • La validación de longitud #1938 ahora funciona con campos localizados.

  • #1936 Ya se gestionan correctamente los conflictos de "push" con otros "push".

  • #1933 Proxy#extend debe delegar a través del objetivo, donde extender el proxy mismo ahora se gestiona a través de Proxy#proxy_extend.

  • #1930 Asegúrese de que los criterios complejos se amplíen en todas las cláusulas where. (Hans Hasselberg)

  • #1928 La eliminación de documentos incrustados a través de atributos anidados ahora realiza un $pull con criterios de coincidencia por id en lugar de un $pullAll para cubrir todos los casos. Anteriormente, los valores por defecto añadidos recientemente a documentos que ya se habían guardado no podían ser borrados en este asunto dado que el documento no coincidía con lo que había en la base de datos.

  • #1924/#1917 Se solucionó el problema de enviar a relaciones embebidas con ámbitos predeterminados que no se aplican al nuevo documento. (Hans Hasselberg)

  • #1922/#1919 Al eliminar colecciones, se desmemoriza la colección internamente encapsulada para garantizar que, al definir colecciones limitadas, siempre se vuelvan a crear como limitadas. (Hans Hasselberg)

  • La validación de unicidad #1916/#1913 ya no se ve afectada por el alcance por defecto. (Hans Hasselberg)

  • #1943 Asegúrate de que la validación de la numericidad funcione correctamente para decimales grandes.

2.4.8

Problemas resueltos

  • #1892 Cuando se produzca un error de operación no maestra, Mongoid debería reconectarse antes de reintentar la operación.

  • #1887 No hagas una cascada de funciones de retorno a los hijos que no tengan la función de retorno definida.

  • #1882 No expanda el criterio de identificación duplicada en un $and con selecciones duplicadas.

  • #1878 Se corrigieron los valores predeterminados de la aplicación para que no se apliquen en ciertas selecciones only o without en la iteración, no solo en first y last.

  • #1874 Se corrigió la constante de rechazo de todos los procedimientos en blanco para manejar los valores correctamente con un valor de destrucción que no esté en blanco. (Stefan Daschek)

  • #1869/#1868 Los conjuntos atómicos retrasados ahora usan la ruta atómica en lugar del nombre de los metadatos para solucionar problemas de incrustación de múltiples niveles. (Chris Micacchi proporcionó las especificaciones)

  • #1866 la publicación procesamiento de los por defecto (procs) debe aplicarse después de vincular el secundario en una relación.compilar.

2.4.7

Problemas resueltos

  • Asegúrate de que la recarga de los documentos incrustados conserve la referencia al principal.

  • #1837 Siempre pase opciones de símbolo al controlador.

  • #1836 Asegúrate de que los conteos de relaciones detecten los documentos persistidos que no han tenido el vínculo de clave externa guardado.

  • #1820 Destruir documentos incrustados en un embeds_many también debe eliminar el documento del objetivo subyacente _uncoped y volver a indexar la relación.

  • #1814 No realice devoluciones de llamadas en cascada en after_initialize.

  • #1800 Las opciones no válidas para la conexión Mongo ahora se filtran.

  • Se ha corregido la igualdad de casos de #1785 para gestionar adecuadamente las comprobaciones de instancia.

2.4.6

Problemas resueltos

  • #1772 Permitir omitir y limitar a convertir cadenas en enteros. (Jean Boussier)

  • #1767 El modelo #update_attributes vuelve a aceptar opciones de asignación masiva. (Hans Hasselberg)

  • #1762 El criterio #any_of ahora maneja correctamente los campos localizados.

  • #1758 Metadatos ahora devuelve self en las opciones para el soporte de bibliotecas externas.

  • #1757 Asegúrate de que la serialización convierte cualquier tipo de atributo al tipo definido por el campo.

  • #1756 Las opciones de hash serializables deben pasar a los Docs incrustados.

2.4.5

Problemas resueltos

  • #1751 El registrador de Mongoid ahora responde a level para la compatibilidad con la API de registro de Ruby.

  • #1744/#1750 La ordenación ahora funciona para campos localizados en documentos incrustados mediante la API de criterios. (Hans Hasselberg)

  • #1746 La validación de presencia ahora muestra qué localizaciones estaban vacías para los campos localizados. (Cyril Mougel)

  • #1727 Permitir que la notación de puntos en los criterios de incrustación funcione tanto en incrustaciones de uno como de varios. (Lyle Underwood)

  • #1723 Las funciones de retorno de inicialización deben propagarse por los descendientes sin necesidad de determinar si el descendiente ha cambiado.

  • #1715 Los hashes serializables ahora son coherentes en la inclusión de documentos incrustados por o después del guardado.

  • #1713 Arreglando las comprobaciones === al comparar una clase con una instancia de una subclase.

  • #1495 Las funciones de retorno ya no generan los errores 'super llamado fuera del método' en 1.8.7 rubíes.

2.4.4

Problemas resueltos

  • #1705 Permite cambiar el orden de las claves externas de muchos a muchos.

  • #1703 Actualizado ahora está versionado de nuevo. (Lucas Souza)

  • #1686 Establece los metadatos base en desvinculación y también en vinculación para relaciones de pertenencia.

  • #1681 Intentar crear índices para modelos sin namespaces si no existe el namespace para el subdirectorio.

  • #1676 Permite que la carga anticipada funcione como un ámbito por defecto.

  • #1665/#1672 Expandir criterios complejos en selectores de criterios anidados, como #matches. (Hans Hasselberg)

  • #1668 Asegúrate de que el logger de Mongoid existe antes de llamar a warn. (Rémy Coutable)

  • #1661 Asegúrate de que la validación de unicidad funcione en los documentos clonados.

  • #1659 Borra los conjuntos atómicos retrasados ​​al restablecer la misma relación integrada.

  • #1656/#1657 No acceda a la base de datos para la validación de unicidad si tanto el alcance como el atributo no han cambiado. (priyaaank)

  • #1205/#1642 Al limitar los campos devueltos desde la base de datos mediante Criteria#only y Criteria#without y luego guardar el documento, los valores predeterminados ya no anulan los campos excluidos.

2.4.3

Problemas resueltos

  • La serialización DateTime #1647 cuando ya está en UTC no convierte a la hora local.

  • #1641/#1639 Objetos Mongoid.observer.disable :all ahora se comporta como AR.

  • Los consumidores de actualización #1640 deben estar vinculados al nombre de la colección en la que persisten, no al nombre de la clase.

  • #1637/#1636 Los alcances ya no modifican los alcances de la clase principal al subclasificar. (Hans Hasselberg)

  • #1629 Los criterios $all y $in en relaciones múltiples integradas ahora gestionan correctamente las búsquedas de expresiones regulares y elementos de longitud variable. (Douwe Maan)

  • #1623/#1634 Los ámbitos predeterminados ya no interrumpen Mongoid::Versioning. (Hans Hasselberg)

  • #1605 Arreglar la regresión de las respuestas de rescate, Rails 3.2

2.4.2

Problemas resueltos

  • El campo #1628 _type se puede incluir nuevamente en la serialización a json o xml como una opción global con include_type_for_serialization. (Roman Shterenzon)

  • #1627 La validación de formato ahora funciona correctamente con campos localizados. (Douwe Maan)

  • #1617 Los métodos de proxy de relación ahora aparecen en la lista de campos prohibidos de Mongoid.

  • #1615 Permitir una única configuración de host y puerto para todas las ejecuciones de especificaciones, reemplazada por la configuración de las variables de entorno MONGOID_SPEC_HOST y MONGOID_SPEC_PORT.

  • #1610 Al versionar documentos paranoicos y se establece la versión máxima, elimine por completo las versiones antiguas de la relación incorporada.

  • #1609 Permitir la reintento de conexión durante la iteración del cursor y todas las demás operaciones.

  • #1608 Protege contra errores de método al pasar ids en atributos anidados y los documentos no existen.

  • #1605 remover la advertencia de obsolescencia en las respuestas de rescate, Rails 3.2

  • #1602 Conservar la estructura de las consultas $and y $or al realizar la conversión de tipos.

  • #1600 La validación de unicidad ya no genera errores cuando se proporciona una relación.

  • #1599 Asegúrese de que los objetivos enumerables cedan el paso a lo que está en la memoria primero cuando se ejecuta #each, no siempre a lo descargado primero.

  • #1597 Corrige la capacidad de cambiar el orden de los campos de arreglo con los mismos elementos.

  • #1590 Permitir la correcta serialización de valores booleanos en criterios donde el campo esté anidado dentro de un arreglo.

2.4.1

Problemas resueltos

  • #1593 Ahora, los arreglos en documentos incrustados se actualizan correctamente de forma atómica cuando se modifican desde la versión original.

  • #1592 No tragar las excepciones de la generación de índices en la tarea rake create_indexes.

  • #1589 Permitir la asignación de un arreglo vacío a HABTM cuando aún no se hayan cargado documentos en la memoria.

  • #1587 Cuando un valor anterior de un campo de arreglo era un nil explícito, ahora se puede restablecer atómicamente con nuevos valores.

  • #1585 Model#respond_to? ahora retorna verdadero para el setter cuando se permite campos dinámicos.

  • #1582 Permita que se establezcan valores nil en arreglos.

  • #1580 Permite que los arreglos se puedan establecer en nil después de guardar, y no solo que estén vacíos.

  • #1579 No llames a #to_a en elementos de campo individuales configurados en un criterio.

  • #1576 No realices una consulta a la base de datos durante la validación de unicidad si el campo que está siendo validado no ha cambiado.

  • #1571 Los campos con alias obtienen todos los métodos de atributos incorrectos y todos los métodos de obtención y establecimiento, tanto para el nombre original como para el alias. (Hans Hasselberg)

  • #1568 Retorno al entorno de desarrollo con advertencia cuando no hay ningún entorno configurado.

  • #1565 Para campos y claves externas con nombres de Ruby o de base de datos no estándar, usar define_method en lugar de class_eval para crear los accessors y métodos dirty.

  • #1557 La clase de estrategia interna ya no entra en conflicto con los modelos.

  • #1551 Los documentos padre ahora devuelven true para Model#changed? si solo los documentos hijos (incrustados) han cambiado.

  • #1547 Restablecimiento de los hijos persistentes desde un guardado principal cuando una nueva espera hasta las funciones de retorno posteriores, reflejando la funcionalidad de actualización.

  • #1536 La carga anticipada ahora ocurre al ejecutar first o last sobre un criterio si se especifican inclusiones.

2.4.0

Nuevas características:

  • Ahora se pueden pasar rangos a los criterios #where para crear una $gte/$lte query por detrás de escena. Person.where(dob: start_date...end_date)

  • Ahora, los campos serializables personalizados pueden sobrescribir #selection para proporcionar serialización personalizada para criteria queries.

  • Ahora, #1544 Internals utiliza Array.wrap en lugar de to_a donde sea posible.

  • La validación de presencia de #1511 ahora es compatible con campos localizados. (Tiago Rafael Godinho)

  • #1506 Model.set ahora aceptará valores falsos y nulos. (Marten Veldthuis)

  • #1505 Model.delete_all/destroy_all ahora aceptan un hash :conditions o directamente los atributos.

  • #1504 Model.recursively_embeds_many ahora acepta una opción :cascade_callbacks. (Pavel Pravosud)

  • #1496 Mongoid ahora convierte cadenas de nuevo en símbolos para los campos de símbolos que otra aplicación guarda como cadenas.

  • Las asociaciones #1454, #900 ahora tienen una devolución de llamada after_build que se ejecuta después de llamar a los métodos .build o build_. (Jeffrey Jones, Ryan Townsend)

  • #1451 Los rangos ahora pueden ser cualquier valor de rango, no solo números. (aupajo)

  • La localización de #1448 ahora se usa al ordenar. (Hans Hasselberg)

  • #1422 Mongoid genera un error al cargar yaml si no se encuentra ningún entorno. (Tom Stuart)

  • #1413 No se agregó soporte a los métodos de símbolos de criterios. (Marc Weil)

  • #1403 Se agregó la opción de configuración scope_overwrite_exception, cuyo valor predeterminado es falso para generar un error al definir un ámbito con nombre que coincide con el nombre de un método existente. (Christoph Grabo)

  • #1388 model.add_to_set ahora admite la adición de múltiples valores y ejecuta un $addToSet con $each en segundo plano. (Christian Felder)

  • #1387 Añadido Model#cache_key para su uso en la caché de Rails. (Seivan Heidari)

  • #1380 Llamar a Model.find(id) ahora convertirá correctamente hacia y desde cualquier tipo en función del tipo del campo _id.

  • #1363 Se agregaron alternativas y soporte predeterminado para campos localizados, y se agregó la capacidad de obtener y configurar todas las traducciones a la vez.

  • Los campos alias de #1362 ahora se tipifican correctamente en los criterios.

  • #1337 Los campos de arreglo, incluidos los muchos HABTM y claves foráneas ahora tienen una comprobación de cambios más inteligente y ya no realizan un simple $set si el arreglo ha cambiado. Si solo se han añadido elementos al arreglo, se realiza un $pushAll. Si solo se han eliminado elementos, se realiza un $pullAll. Si se han producido tanto adiciones como eliminaciones, se realiza un $set para evitar modificaciones en conflicto.

Problemas resueltos

  • Llamar a Document#as_document en un documento congelado en Rubinius devuelve los atributos en lugar de nil.

  • #1554 Divida la aplicación de valores predeterminados en proc/non-procs, donde los no-procs se ejecutan inmediatamente durante la instanciación y los procs se ejecutan después de que se establecen todos los demás valores.

  • #1553 Las combinaciones de agregar y remover valores de un arreglo utilizan un $set en el contenido actual del arreglo, no en los nuevos valores.

  • #1546 Los cambios sucios deben devolverse en un hash con acceso indiferente.

  • #1542 La carga inmediata ahora respeta las opciones (es decir, skip, limit) proporcionadas a los criterios al recuperar las asociaciones.

  • #1530 No dupliques los valores añadidos a los arreglos mediante el seguimiento de cambios si el arreglo es un campo de clave externa.

  • #1529 Llamar a unscoped en asociaciones relacionales ahora funciona correctamente.

  • #1524 Permitir el acceso a las relaciones en setters de campos sobreescritos al preestablecer valores por defecto de claves externas.

  • #1523 Permitir la desactivación de los observadores a través de disable. (Jonas Schneider)

  • #1522 Tarea fija de creación de índices rake para Rails 3.2. (Gray Manley)

  • #1517 Corregir los documentos Mongoid para que funcionen correctamente con stub_model de RSpec. (Tiago Rafael Godinho)

  • #1516 No dupliques muchos documentos relacionales al vincular.

  • #1515 Mongoid ya no intenta serializar los campos personalizados en criterios complejos por defecto.

  • #1503 Tiene muchas sustituciones de relaciones y ahora maneja cualquier tipo de combinación de documentos existentes y nuevos.

  • #1502 Los atributos anidados en documentos incrustados respetan si el hijo es paranoico.

  • #1497 Utiliza el mensaje proporcionado al fallar la validación de unicidad. (Justin Etheredge)

  • #1491 Devuelve nil cuando no se establece un valor por defecto en los campos localizados. (Tiago Rafael Godinho)

  • #1483 El módulo de envío incluye en tiempo de ejecución la adición de nuevos campos a un documento principal, además de que los campos se agregan a las subclases.

  • #1482 La aplicación de nuevas opciones de ordenación no se integra con los criterios previamente encadenados. (Gerad Suyderhoud)

  • #1481 Se corrige una consulta no válida al acceder a relaciones de muchos a muchos antes de que se establezcan los valores predeterminados.

  • #1480 Los tipos de campo serializado internos de Mongoid se renombraron a Internos para no entrar en conflicto con las clases principales de Ruby en los tipos serializables personalizados.

  • #1479 No dupliques IDs en relaciones de varios a varios al usar create o create!

  • #1469 Cuando extract_id retorna nil, saca el documento del mapa de identidad usando el selector de criterios.

  • #1467 Definir un campo llamado metadatos ahora genera correctamente un error de campo no válido.

  • #1463 Los consumidores de inserción de agrupar ahora están restringidos a la colección para evitar que los documentos se guarden en otras colecciones en funciones de retorno que se dirigen al lugar incorrecto.

  • #1462 La asignación de muchas relaciones a través de atributos anidados *_attributes= no autoguarda la relación.

  • #1461 Se corrigió la serialización de los campos de clave externa en criterios complejos para no escapar del hash completo.

  • La versionización de #1458 ya no omite los campos que estaban protegidos contra la asignación masiva.

  • #1455, #1456 Al llamar a destroy en cualquier documento, ahora se marca temporalmente como marcado para destrucción hasta que la operación esté completa. (Nader Akhnoukh)

  • #1453 Model#to_key debería devolver un valor cuando el documento sea destruido.

  • #1449 Los documentos nuevos ya no se conservan cuando se reemplazan por uno que tiene uno como efecto secundario. (jasonsydes)

  • ¿#1439 incorporado? debería devolver true cuando la relación se defina como cíclica.

  • #1433 Los atributos anidados polimórficos para 1y1 actualizan correctamente.

  • #1426 Los documentos congelados ahora pueden clonarse. (agrawal2001)

  • #1382 Generar un error adecuado al crear índices mediante una tarea rake si la definición del índice es incorrecta. (Mathieu Ravaux)

  • #1381, #1371 El mapa de identidad ahora funciona correctamente con documentos heredados. (Paul Canavese)

  • #1370 Divida la concatenación en arreglos incrustados en su propio método para manejar el procesamiento por lotes debido a problemas de ejecución tras la ejecución de la función de retorno.

  • #1366 Los valores de matriz y hash ahora se copian en profundidad para el seguimiento sucio.

  • #1359 Brinda la capacidad de no aplicar el alcance por defecto a todos los alcances nombrados mediante el uso de lambdas.

  • #1333 Se corrigieron errores con tipos personalizados que existen en namespaces. (Peter Gumeson)

  • #1259 Los valores por defecto se consideran alterados si difieren del estado de la base de datos.

  • #1255 Asegúrese de que los documentos incrustados respeten el alcance por defecto definido.

2.3.4

  • #1445 Prevenir documentos duplicados en el arreglo cargado en el enumerable de destino para las asociaciones relacionales.

  • #1442 Al usar los métodos create_ para relaciones uno a uno, ahora se invocan los métodos destructivos correspondientes al reemplazar un documento existente.

  • #1431 El contexto enumerable debería añadirse al arreglo cargado después del rendimiento, de modo que métodos como #any? que se interrumpen anticipadamente según el valor del bloque, no tengan falsamente documentos extra.

  • #1418 Los documentos que se cargan desde la base de datos con fines de revisión ya no se colocan en el mapa de identidad.

  • #1399 Permitir la conversión de cadenas a enteros en claves externas donde el id esté definido como entero.

  • #1397 No agregue criterios de clasificación predeterminados primero si ya existen criterios de clasificación.

  • Se corrigió #1394 existe? para que funcione cuando el recuento sea mayor que 1. (Nick Hoffman)

  • #1392 Devuelve 0 en funciones de agregación donde el campo no existe.

  • #1391 La validación de unicidad ahora funciona correctamente en documentos incrustados que utilizan definiciones de clave principal.

  • #1390 Cuando el campo _type está en minúscula, la clase camelize antes de constanteizar.

  • #1383 Arreglar la conversión en la lectura para campos serializables que son subclases.

  • #1357 Los conjuntos atómicos en diferido con update_attributes en documentos incrustados a niveles múltiples ahora se persisten correctamente.

  • #1326 Asegúrese de que el documento base en HABTM guarde sus claves después de guardar un documento secundario recién compilado.

  • #1301 No sobrescribas los metadatos base en embebidos en relaciones si ya están definidos.

  • #1221 HABTM con inverso nil vuelve a estar permitido en documentos incrustados.

  • #1208 No se debe persistir automáticamente los documentos secundarios mediante el modificador al establecer desde un objeto embedded_in.

  • #791 El documento raíz actualiza sus marcas de tiempo cuando solo se han modificado los documentos incrustados.

2.3.3

Problemas resueltos

  • #1386 Se redujo la dependencia de mongo/bson a 1.3

  • #1377 Arregla las funciones de agregación para gestionar adecuadamente los valores nil o indefinidos. (Maxime Garcia)

  • #1373 Advertir si un ámbito anula otro ámbito.

  • #1372 Nunca persistas al enlazar dentro de un atributo de lectura para validación.

  • #1364 Se corrigió la recarga de documentos con IDs que no son del tipo BSON ObjectID.

  • #1360 Se corrigió el rendimiento de la instanciación del observador de Mongoid al conectarse a los ganchos de carga de Active Support, al estilo AR.

  • #1358 Corregido el error de tipo en la sincronización de muchos a muchos cuando inverse_of está configurado en nil.

  • Ahora la función #1356 $in se puede encadenar a criterios no complejos en la misma clave sin errores.

  • #1350, #1351 Errores corregidos en las conversiones de cadena de comillas dobles y tilde al parametrizar claves.

  • #1349 Los documentos no deberían explotar al incluir Enumerable. (Jonas Nicklas)

2.3.2

Problemas resueltos

  • #1347 Se solucionan los matchers embebidos cuando se proporciona un valor hash que no tiene un modificador como clave.

  • #1346 Criterios de clasificación predeterminados duplicados al llamar primero/último en un criterio.

  • #1343 Al no pasar argumentos a Criteria#all_of se devuelven todos los documentos. (Chris Leishman)

  • #1339 Garantiza que las funciones de retorno de destrucción se ejecuten en los elementos hijos en cascada al borrarse a través de atributos anidados.

  • #1324 Configurar inverse_of: nil en una relación muchos-a-muchos que hace referencia a la misma clase devuelve nil como clave externa inversa.

  • #1323 Permite tanto cadenas de texto como símbolos como IDs en el arreglo de atributos para atributos anidados. (Michael Wood)

  • 1312 Establecer un registros en la configuración ahora acepta cualquier cosa que se comporte como un registros.

  • #1297 No acceda a la base de datos al acceder a relaciones si la base es nueva.

  • #1239 Permitir agregar relaciones referenciadas en bloques de creación, después del conjunto predeterminado.

  • #1236 Asegúrate de que todos los modelos estén cargados en las tareas de rake, para que incluso en modo threadsafe se puedan crear todos los índices.

  • #736 Ahora llamar a #reload en documentos incrustados funciona correctamente.

2.3.1

Problemas resueltos

  • #1338 Llamar a #find en un alcance o relación verifica que el documento en el mapa de identidad realmente coincida con otros parámetros de alcance.

  • #1321 HABTM ya no permite entradas o claves duplicadas, en lugar de las inconsistencias anteriores.

  • #1320 Se corrigieron errores en el punto de referencia de rendimiento.

  • #1316 Se agregó una tarea Rake independiente "db:mongoid:drop" para que Mongoid y AR puedan coexistir. (Daniel Vartanov)

  • #1311 Se soluciona el problema con la serialización de campos personalizados que heredan del hash.

  • #1310 En el sistema referenciado, el objetivo de muchos enumerables ya no duplica los documentos cargados y agregados cuando el mapa de identidad está habilitado.

  • #1295 Se solucionó que varias inclusiones solo ejecutaran la carga ansiosa de la primera.

  • #1287 Se ha corregido la limitación máxima de versiones con la versionación.

  • #1277 attribute_will_change! marca correctamente el atributo incluso si no se produjo ningún cambio.

  • #1063 Los documentos paranoicos ejecutan correctamente las devoluciones de llamadas de destrucción en la destrucción suave.

  • #1061 Genera Mongoid::Errors::InvalidTime cuando falla la serialización de tiempo.

  • #1002 Verifique los identificadores de bson legales al intentar la conversión.

  • #920 Permitir que las relaciones sean nombradas objetivo.

  • #905 Devolver el nombre de clase normalizado en los metadatos si la cadena fue definida con un prefijo ::.

  • #861 accepts_nested_attributes_for ya no se requiere para establecer documentos incrustados mediante un hash o un arreglo de hashes directamente.

  • #857 Se corrigió el encadenamiento de relaciones dependientes cuando el documento base es paranoico.

  • #768 Definiciones de atributos de clase fijas en todo el módulo.

  • Los documentos incrustados #408 ahora pueden borrarse de forma suave mediante Mongoid::Paranoia.

2.3.0

Nuevas características:

  • Mongoid ahora admite campos básicos localizados, almacenándolos como un hash de pares localización => valor. field :name, localize: true

  • #1275 Para las aplicaciones que tienen el modo seguro predeterminado como verdadero, ahora puede indicarle a una sola operación que persista sin el modo seguro mediante #unsafely: person.unsafely.save, Person.unsafely.create. (Matt Sanders)

  • #1256 Mongoid ahora puede crear índices para modelos en motores de Rails. (Caio Filipini)

  • #1228 Permitir el preformateo de claves compuestas pasando un bloque a #key. (Ben Hundley)

  • Ahora se admite la asignación masiva con ámbito #1222. (Andrew Shaydurov)

  • #1196 Las marcas de tiempo ahora se pueden desactivar llamada por llamada mediante el uso de #timeless: person.timeless.save, Person.timeless.create(:title => "Sir").

  • #1103 Permitir que los desarrolladores creen sus propios criterios personalizados complejos. (Ryan Ong)

  • Mongoid ahora incluye todos los campos definidos en los resultados serializable_hash y to_json incluso si los campos no tienen valores para que los documentos serializados sean más fáciles de usar para los clientes de ActiveResource.

  • El soporte para el operador $and de MongoDB ahora está disponible en la forma de: Criteria#all_of(*args) donde args es varias expresiones encriptadas.

  • #1250, #1058 Los documentos incrustados ahora pueden activar sus funciones de retorno en una guardada principal al configurar :cascade_callbacks => true en la relación. (piromania, Paul Rosania, Jak Charlton)

Cambios importantes

  • Mongoid ahora depende del modelo activo 3.1 y superior.

  • Mongoid ahora depende de Mongo Ruby Driver 1.4 y superior.

  • Mongoid requiere MongoDB 2.0.0 y versiones superiores.

Problemas resueltos

  • #1308 Alcance fijo de búsquedas HABTM.

  • Los modelos con espacio de nombres #1300 deben gestionar correctamente la inclusión recursiva.

  • #1299 Los documentos autoreferenciados con control de versiones ya no fallan cuando inverse_of no está definido en todas las relaciones.

  • #1296 Se cambió el nombre del método de construcción interno a _building.

  • #1288, #1289 _id y updated_at no deben formar parte de los atributos versionados.

  • #1273 Mongoid.preload_models ahora comprueba si la opción de configuración de precarga está activada, donde Mongoid.load_models siempre carga todo. (Ryan McGeary)

  • Las relaciones #1244 Has ahora siguen el comportamiento dependiente por defecto.

  • #1225 se corrigió la persistencia retrasada de documentos incrustados mediante $set.

  • #1166 No cargues configuraciones en Railtie si no se están definiendo variables de entorno. (Terence Lee)

  • #1052 alias_attribute ahora vuelve a funcionar como se esperaba.

  • #939 Aplicar atributos predeterminados al realizar upcasting mediante #becomes. (Christos Pappas)

  • #932 Se corrigió la conversión de campos enteros con ceros iniciales.

  • #948 Restablecer el número de versión en el clon si existían versiones.

  • #763 No mezclar arreglos de criterios $in al encadenar ámbitos nombrados.

  • #730 Los modelos existentes que tienen relaciones agregadas después de la persistencia de los originales ahora pueden tener nuevas relaciones agregadas sin migraciones.

  • #726 Los documentos incrustados con claves compuestas no validan la unicidad correctamente.

  • Las relaciones cíclicas no integradas ahora validan correctamente la unicidad en #582.

  • #484 Validar la Unicidad con Múltiples Alcances de Todos los Tipos Ahora Funciona Correctamente.

  • La eliminación de versiones creadas con Mongoid::Versioning ya no activa la dependencia de propagación en las relaciones.

2.2.5

  • Esta fue una pequeña actualización para corregir 2.2.x Errores de Heroku durante la compilación de activos.

2.2.4

  • #1377 Arregla las funciones de agregación para gestionar adecuadamente los valores nil o indefinidos. (Maxime Garcia)

  • #1373 Advertir si un ámbito anula otro ámbito.

  • #1372 Nunca persistas al enlazar dentro de un atributo de lectura para validación.

  • #1358 Corregido el error de tipo en la sincronización de muchos a muchos cuando inverse_of está configurado en nil.

  • Ahora la función #1356 $in se puede encadenar a criterios no complejos en la misma clave sin errores.

  • #1350, #1351 Se corrigieron los errores en las conversiones de cadenas de comillas dobles y de la tilde ~ al parametrizar claves.

  • #1349 Los documentos no deberían explotar al incluir Enumerable. (Jonas Nicklas)

2.2.3

  • #1295 Se solucionó que varias inclusiones solo ejecutaran la carga ansiosa de la primera.

  • #1225 se corrigió la persistencia retrasada de documentos incrustados mediante $set.

  • #1002 Se corrige la conversión de identificación del objeto BSON para verificar si es legal primero.

2.2.2

  • Esta versión elimina la restricción de la dependencia de la versión 1.3.x del controlador Mongo Ruby. Los usuarios ahora pueden usar 1.3.x a través de 1.4.x.

2.2.1

Problemas resueltos

  • #1210, #517 Permitir que las consultas de relaciones de documentos incrustados utilicen la notación de puntos. (Scott Ellard)

  • #1198 El objetivo enumerable debe usar el criterio de conteo si el elemento cargado no tiene documentación.

  • #1164 Elimine los errores restantes de no haber métodos en la memoria.

  • #1070 Permitir que los serializadores de campos personalizados tengan sus propios constructores.

  • #1176 Permitir el acceso a documentos principales desde Docs incrustados en 'after_destroy funciones de retorno'.

  • Los métodos del grupo de contexto #1191 (min, max, sum) ya no devuelven NaN, sino que devuelven nil si el campo no existe o no tiene valores.

  • #1193, #1271 Siempre devuelven enteros para campos enteros con .000 precisiones, no decimales flotantes.

  • #1199 Se corrigieron los problemas de rendimiento al acceder a campos hash y de arreglo al leer varias veces.

  • #1218 Se han corregido los problemas con las relaciones que referencian modelos con claves externas enteras.

  • #1219 Se corrigieron varios problemas de modificaciones conflictivas al enviar y recibir desde el mismo documento incrustado en una sola llamada.

  • #1220 Los metadatos no deben sobrescribirse con nil durante el enlace.

  • #1231 Se renombró la clase de conjunto atómico de Mongoid como ‘Sets’ para evitar conflictos con el conjunto nativo de Ruby tras la inclusión de documentos.

  • #1232 Reparar el acceso a los modelos relacionados durante los callbacks de before_destroy al hacer cascada.

  • #1234 Se corrigieron los problemas de sincronización de claves foráneas de HABTM al destruir documentos.

  • #1243 Las relaciones polimórficas no se convierten en identificadores de objetos al consultar si los identificadores se han definido como cadenas.

  • #1247 Fuerza a Model.first a ordenar por identificación ascendente para garantizar el primer documento.

  • #1248 Añadido #desagrupado para relaciones embebidas de muchos a muchos.

  • #1249 Las banderas de destrucción en atributos anidados ahora destruyen el documento para has_many en lugar de solo romper la relación.

  • #1272 No modifique las opciones de configuración existentes al crear conexiones de conjuntos de réplicas.

2.2.0

Nuevas características:

  • Mongoid ahora contiene carga ansiosa en forma de Criteria#includes(*args). Esto funciona en las asociaciones has_one, has_many, belongs_to y requiere que el mapa de identidad esté habilitado para poder funcionar. Coloca identity_map_enabled: true en tu mongoid.yml. Ej: Person.where(title: "Sir").includes(:posts, :game)

  • Las relaciones ahora pueden tomar un módulo como valor para la opción :extend. (Roman Shterenzon)

  • Las colecciones limitadas pueden crearse pasando las opciones a la macro #store_in: Person.store_in :people, capped: true, max: 1000000

  • Mongoid::Collection ahora es compatible collection.find_and_modify

  • Document#has_attribute? ahora es un alias de Document#attribute_present?

  • #930 Ahora puede desactivar el registrador Mongoid a través de mongoid.yml haciendo logger: false

  • #909 Ahora generamos una excepción Mongoid::Errors::Callback si persistimos con un método bang y una devolución de llamada devuelve falso, en lugar del error de validaciones no informativo de antes.

Cambios importantes

  • Las relaciones has_many de #1173 ya no borran todos los documentos en un conjunto de la relación (= [ doc_one, doc_two ]), sino que recurren a la opción dependiente para determinar el comportamiento que debería ocurrir. :delete y :destroy se comportarán como antes, :nullify y ninguna opción especificada anularán ambos los documentos antiguos sin borrarlos.

  • #1142, #767 Las relaciones incrustadas ya no persisten de forma inmediata y atómica al acceder a ellas mediante un conjunto de atributos primarios. Esto incluye la configuración de atributos anidados y attributes= o write_attributes. Los cambios secundarios se mantienen y se actualizan automáticamente al guardarse en ellos o en el documento primario.

Problemas resueltos

  • #1190 Se corrigieron los errores de gemspec debido al cambio de README y CHANGELOG a Markdown.

  • #1180, #1084, #955 Mongoid ahora verifica los tipos de campo en lugar de si el nombre contiene /id/ cuando intenta convertir a identificadores de objetos en los criterios.

  • #1176 Los objetivos enumerables deben devolver siempre primero los documentos en memoria al llamar #first

  • #1175 Asegúrate de que ambos lados de relaciones de muchos a muchos estén sincronizados durante una creación.

  • #1172 Las relaciones enumerables referenciadas ahora gestionan correctamente #to_json (Daniel Doubrovkine)

  • #1040 Se aumentó el rendimiento de los tiempos de carga de clases al eliminar todas las llamadas de delegados a self.class.

2.1.9

Problemas resueltos

  • #1159 Se corrigió para que los bloques de compilación no se anulen entre sí cuando están anidados.

  • #1154 No elimine documentos de muchos a muchos en un conjunto de matrices vacío.

  • #1153 Conservar la referencia del documento principal en los callbacks posteriores.

  • #1151 Se corrige el bucle infinito de validación asociado en documentos con autorreferencia.

  • #1150 Las validaciones asociadas en belongs_to son false de manera predeterminada.

  • #1149 Configuración de metadatos fijos en belongs_to relaciones.

  • #1145 metadatos Inverse debería regresar nil si inverse_of fue establecido como nil.

  • #1139 Los objetivos enumerables ahora se procesan como matrices.

  • #1136 Configurar belongs_to padre como nil ya no elimina al padre.

  • #1120 No llames a in_memory en relaciones si no responden a ello.

  • #1075 Establezca self en los procedimientos predeterminados en la instancia del documento.

  • #1072 Los atributos de escritura para documentos anidados pueden tomar un hash o una matriz de hashes.

  • #990 Los documentos incrustados pueden usar un único embedded_in con varias definiciones principales.

2.1.8

Problemas resueltos

  • #1148 respond_to? arreglado en todas las relaciones para que se devuelva correctamente.

  • #1146 Agregado de nuevo la verificación de campos destructivos de Mongoid al definir campos.

  • #1141 Convertidos a valores fijos nil en los criterios.

  • #1131 Mongoid/Kaminari verificados paginando correctamente.

  • #1105 Se ha corregido el consumidor de actualización atómica para que esté limitado al alcance de la clase.

  • #1075 self en los lambdas y procs por defecto ahora hacen referencia a la instancia del documento.

  • #740 Se eliminó el parámetro de configuración embedded_object_id.

  • #661 Se ha corregido el almacenamiento en caché de metadatos en documentos incrustados.

  • #595 Se corrigió la señalización de recarga de relación.

  • 410 Ahora, la transferencia de documentos de una relación a otra funciona como se espera.

2.1.7

Esta fue una versión específica para corregir MRI 1.8.7 incidencias introducidas por 2.1.6.

2.1.6

Problemas resueltos

  • #1126 Corrige la configuración de relaciones con otras proxies de relación.

  • #1122 Los campos hash y arreglos ahora se marcan correctamente como sucios al accederlos y modificarlos.

  • #656 Se corrigió la recarga que rompía las relaciones al desconfigurar asociaciones que ya estaban cargadas.

  • #647 Prefiere #unset sobre #remove_attribute para remover valores.

  • #290 Verifica los envíos en documentos profundamente incrustados.

2.1.5

Problemas resueltos

  • #1116 Los elementos secundarios incrustados conservan la referencia al elemento primario en las devoluciones de llamadas de destrucción.

  • #1110, #1115 No almacenes en caché los ayudantes relacionados con los metadatos en los documentos.

  • #1112 db:create_indexes ya no indexa subclases varias veces.

  • #1111, #1098 No establezca _id en $set operaciones.

  • #1007 La actualización del atributo realiza un seguimiento adecuado de los cambios en el arreglo.

2.1.4

Esta fue una versión específica para obtener un gemspec generado por Psych, de modo que no se produzcan más errores de análisis en los rubíes que estaban utilizando el nuevo analizador YAML.

2.1.3

Problemas resueltos

  • #1109 Se corrigieron las validaciones que no cargaban uno a uno en la memoria.

  • #1107 A Mongoid ya no le interesa que mongoid/railtie sea obligatorio en application.rb.

  • #1102 Se corrigió la eliminación de atributos anidados.

  • #1097 Recargar ahora ejecuta after_initialize callbacks.

  • #1079 Incrusta muchos documentos que ya no duplican.

  • #1078 Criterios de coincidencia de arreglo fijo en documentos incrustados.

  • #1028 Implementa el alcance en relaciones uno a muchos y muchos a muchos.

  • #988 "Many-to-many clear" ya no elimina los documentos secundarios.

  • #977 Las relaciones de guardado automático también funcionan a través de atributos anidados.

  • #972 La incrustación recursiva ahora maneja el espacio entre nombres en los nombres generados.

  • #943 No sobrescribas Document#attributes.

  • #893 Verifica que el recuento no se esté almacenando en caché en relaciones de muchos a muchos.

  • #815 Verifique que after_initialize se ejecute en el lugar correcto.

  • #793 Verifique que la cadena de ámbitos any_of se conecte correctamente con cualquier otro ámbito.

  • #776 Se corrigió la calidad del caso mongoide al tratar con subclases.

  • #747 Se corrigieron los criterios complejos utilizando sus claves para renderizar su valor en forma de cadena.

  • #721 #safely ahora genera correctamente errores de validación cuando se presentan.

2.1.2

Problemas resueltos

  • #1082 Alias size y length a count según los criterios. (Adam Greene)

  • #1044 Cuando se definen múltiples relaciones para la misma clase, siempre se devuelve primero la inversa predeterminada si no se define inverse_of.

  • #710 Los atributos anidados aceptan tanto id como _id en hashes o arreglos.

  • #1047 Ignorar los valores nil pasados a embeds_man pushes y sustituciones. (Derick Bailey)

2.1.1

Problemas resueltos

  • #1021, #719 Las relaciones de muchos a muchos no activan consultas de base de datos adicionales al enviar documentos nuevos.

  • #607 Llamar a create en asociaciones grandes no carga la relación completa.

  • #1064 Mongoid::Paranoia debe respetar unscoped y scoped.

  • #1026 model#update_attribute ahora puede actualizar valores booleanos a false.

  • #618 La biblioteca Crack XML rompe Mongoid al añadir el método #attributes a la clase String. (Stephen McGinty)

2.1.0

Cambios importantes

  • Mongoid ahora requiere MongoDB 1.8.x para brindar soporte adecuado a las operaciones atómicas #bit y #rename.

  • El soporte tradicionales para esclavos se ha eliminado de Mongoid. Se debe utilizar sets de réplicas en lugar de configuraciones tradicionales de maestro y esclavo.

  • La serialización de campos personalizados ha cambiado. Consulte la sección "Serializable" para ver los cambios.

  • El seguimiento de atributos sucios se ha cambiado para utilizar ActiveModel, esto aporta muchas correcciones de errores y cambios:

  • #756 Después, los callbacks y observadores pueden ver qué cambios se realizaron en lugar de que los cambios recientes estén en previous_changes

  • #434 Los documentos ahora están marcados como sucios cuando son completamente nuevos o si el estado en la creación difiere del estado en la base de datos. Esto es coherente con ActiveRecord.

  • #323 Mongoid ahora admite [field]_will_change! de ActiveModel::Dirty

  • La precarga del modelo Mongoid en modo de desarrollo ahora es por defecto false.

  • :autosave => true en las asociaciones relacionales ahora se guardan al actualizar así como al crear.

  • Mongoid ahora tiene un identidad de mapa para consultas sencillas de find_by_id. Consulta la documentación en el sitio web.

Nuevas características:

  • Los campos #1067 ahora aceptan un atributo :versioned para poder desactivar qué campos se versionan con Mongoid::Versioning. (Jim Benton)

  • #587 Se ha añadido preferencia de orden a asociaciones muchos y muchos a muchos. (Gregory Man)

  • Se ha añadido la capacidad de encadenar las order_by instrucciones. (Gregory Man)

  • #961 Permite que opciones arbitrarias de Mongo::Connection pasen a través del objeto Mongoid::Config::Database. (Morgan Nelson)

  • Activar autosave para referencias de muchos a muchos. (Dave Krupinski)

  • Se han añadido las siguientes operaciones atómicas explícitas: Model#bit, Model#pop, Model#pull, Model#push_all, Model#rename, Model#unset.

  • Se han agregado traducciones de excepciones para hindi. (Sukeerthi Adiga)

Problemas resueltos

  • #974 Corregir attribute_present? para que funcione correctamente cuando el valor del atributo es false, gracias a @nickhoffman. (Gregory Man)

  • La tarea Rake de creación de índices #960 no está reconociendo muchos modelos de mongoid porque tiene problemas para adivinar sus nombres de modelo a partir de los nombres de archivo. (Tobias Schlottke)

  • #874 Borrar desde una referencia M-M es unilateral. (nickhoffman, davekrupinski)

  • Sustituye la función obsoleta class_inheritable_hash descartada en Rails 3.1+. (Konstantin Shabanov)

  • Corrija el estado inconsistente al reemplazar toda una relación muchos a muchos.

  • No desvirtúe los atributos heredables al agregar la herencia de campos de subclase. (Dave Krupinski)

  • #914 Consultando documentos incrustados con el selector $or. (Max Golovnia)

  • #514 Reparar la transmisión de documentos con extensiones de relación. (Chris Griego)

  • Metadata#extension ahora devuelve un Module, en lugar de un Proc, cuando se define una extensión.

  • #837 Cuando allow_dynamic_fields se configura en false y se está cargando un documento incrustado con un campo no reconocido, se produce una excepción.

  • #963 Se inicializó el arreglo de documentos incrustados mediante hash regresado (Chris Griego, Morgan Nelson)

  • Mongoid::Config.reset restablece las opciones a sus valores por defecto.

  • Mongoid::Fields.defaults Se memoriza para una instanciación más rápida de los modelos.