Overview

有关升级到新版本的说明,请访问mongoid.org

从版本5.0.2开始, 请参阅Github版本以获取变更日志。

5.0.1

已解决的问题

5.0.0

主要更改(向后不兼容)

  • Mongoid 现在使用官方mongo Ruby驱动程序2.x 而不是 Moped。

  • 大多数驾驶员特定的配置选项已更改,请参阅此处了解新选项。

  • session的所有引用现已替换为client 。 这包括 mongoid.yml 配置、 store_in选项以及名称中包含Session的所有异常和模块。

  • find_and_modify 已删除并替换为3选项: find_one_and_updatefind_one_and_deletefind_one_and_replace

  • text_search 已删除,因为它现在是从2.6开始的查询中的$text选项。

  • Mongoid 不再支持 MongoDB 2.2 - 现在仅支持2.4及更高版本。

  • # 在未提供排序选项的情况下, 3768 firstlast不再添加_id排序。 为了保证文档是第一个或最后一个文档,它现在需要包含显式排序。

  • Document#deleted? 别名已删除,请继续使用Document#destroyed?

新增功能

  • # 4016允许在字段上使用私有和受保护的 setter 来执行原子操作。 (罗布·史密斯)

  • # 3985在find_and_modify中使用{upsert: true}时返回 nil (Adrien Siami)

  • # 3963允许将扩展JSON对象ID 传递给find

  • # 3846在条件中未使用任何内容时允许 #puck。 (布劳略·马丁内斯)

已解决的问题

  • # 4091调用超类中定义的作用域时使用子类上下文。 (Edgars Beigarts)

  • # 4075删除索引日志记录专门针对实际删除的每个索引。

  • # 4071修复加载可枚举关系以在迭代时检查添加的文档。

  • # 4077现在许多关系都包含 Enumerable。

  • # 4052修复对没有值的本地化字段的唯一性验证。

  • # 4033删除了原子更新中对 $ 位置操作符的所有使用。

  • # 4030复制/克隆例外情况会自动包含动态属性。

  • # 4005修复了在没有 Rails 环境的 Rails 组件中包含 mongoid 的问题。

  • # 3993修复了以下问题:对于使用 store_as 而不使用 Mongoid::Atributes::Dynamic 的嵌入式文档, dup / clone会失败

  • # 3991修复了嵌入式文档在调用 #changed? 后未标记为已更改的问题。 并修改子元素。

  • # 3874将快照选项添加到上下文中。

  • # 3868现在,在 rake 任务中加载模型会扩展 Rails 路径。

  • # 3764修复可枚举目标的 case声明检查。

  • # 3740修复仅使用方法或不使用方法时的Missing attribute: '_id'错误 (dx 7 )

  • # 3631修复了在创建子节点后可能会调用两次before_save回调的问题

  • # 3599修复了子类中超类默认作用域的应用程序。

  • # 3104修复了可枚举目标,以按正确顺序检查第一个/最后一个目标。

4.0.2

新增功能

  • # 3931添加 #find_or_create_by! 方法进行许多关联。 (汤姆·贝农 饰)

  • # 3731添加 find_by! 方法。 (吉列尔莫·伊瓜兰)

已解决的问题

  • # 3722将 #store_in 和 #with 结合使用时,请使用正确的数据库名称。 (阿瑟·内维斯)

  • # 3934执行 find_by 时不应用排序。 (阿瑟·内维斯)

  • # 3935修复多个字段对上下文内存的排序。 (chamnap)

  • # 3904 BSON::Document#symbolize_keys 应以符号形式返回键。 (阿瑟·内维斯)

  • # 3948修复 Rails 4.2上的 remove_undefined_indexes,以符号化文档键。 (Adam Wróbel)

  • #3626 Document#to_key,需要以 形式返回ObjectId string,以便我们可以使用该ID 进行反向查询。(阿瑟·内维斯)

  • # 3888在不存在的字段上调用“ 设立 ”且 Mongoid::Attributes::Dynamic 未包含在模型中时引发 UnknownAttributeError。 (Shweta Kale)

  • # 当模型中包含 Mongoid::Attributes::Dynamic 时, 3889 ' 设立' 将允许设立不存在字段的值。 (Shweta Kale)

  • # 3812修复保存时的验证上下文 (Yaroslav Zemlynuhin)

4.0.1

已解决的问题

  • # 3911修复名为“parent”的关系。 (nkriege)

  • # 3792 /# 3881修复了对 # _id而不是 #id 的许多内部调用,以避免重载 #id 时出现问题 (Gauthier Delacroix)

  • # 3847修复当集合的文档数多于第一个查询批处理时的“QueryCache#get_more”结果。 (Angelica Korsun)

  • # 3684使用 only() 作用域时,不要引发 MissingAttributeError。 (阿瑟·内维斯)

  • # 3703 pluck 方法不应压缩值。 (阿瑟·内维斯)

  • # 3773使用纳秒作为 cache_key 时间戳,而不是普通的秒。 (马克西莫·墨西尼)

4.0.0

主要更改(向后不兼容)

  • # 3320删除 Rails 对数据库rake 任务的依赖。 (阿瑟·内维斯)

    使用 Rails 时,所有 db:* rake 任务都应像以前一样工作。 当不在 Rails 中时,只需使用以下命令加载数据库任务:

    load 'mongoid/tasks/database.rake'
    
  • Mongoid 4现在仅支持 MongoDB 2.4.0及更高版本。

  • Document#metadata 已重命名为Document#relation_metadata以避免常见冲突。 关系代理也将其重命名为相同的名称。

  • 现在,作用域和默认作用域都必须在 lambda 或 proc 中定义。

  • skip_version_check 配置选项已删除。

  • IdentityMap 已删除。 (阿瑟·内维斯)

  • 预先加载返工。 预先加载现在不需要身份映射来加载相关文档。 一设立预加载器可以预先加载传递给 .includes 的关联 方法。 (阿瑟·内维斯)

  • Mongoid 现在支持核心驱动程序提供的新读取偏好。 其中包括:

    • :primary:将始终从主节点 (primary node in the replica set)节点读取。 (默认)

    • :primary_preferred:首先尝试主节点 (primary node in the replica set)从节点(secondary node from replica set),如果没有可用的,再尝试从节点。

    • :secondary:将始终从从从节点(secondary node from replica set)节点。

    • :secondary_preferred:首先尝试从主节点 (primary node in the replica set)从节点(secondary node from replica set)。

    • :nearest:尝试从延迟最低的节点读取。

    示例语法:

    Person.with(read: :secondary).first
    

    :consistency选项不再有效,请立即使用:read选项。

  • Mongoid 现在默认所有写入都为传播(以前的“安全模式”),并且现在具有不同的传播语义:

    • { w: -1 }:不验证写入,也不会引发网络错误。

    • { w: 0 }:不验证写入并引发网络错误。

    • { w: 1 }:验证主节点 (primary node in the replica set)节点上的写入。 (默认)

    • { w: n }:验证 n 个节点上的写入。

    • { w: "majority" }:验证大多数节点上的写入。

    示例语法:

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

    :safe选项不再有效,请立即使用:write选项。

  • # 3230数组和哈希字段现在会验证设立的类型是否正确,而不是允许任何值。 (罗德里戈·齐藤)

  • # 3043 /# 2949重新设计持久性选项的内部结构。 (阿瑟·内维斯)

  • Mongoid 现在需要活动模型4或更高版本。

  • Document#set 现在接受哈希形式的多个属性,而不是之前的(field, value)参数。 此操作现在还支持字段别名和类型转换。

    document.set(name: "Photek", likes: 10000)
    
  • Document#rename 现在接受哈希形式的多个属性,而不是之前的(field, value)参数。 支持字段别名。

    document.rename(first_name: "fn", last_name: "ln")
    
  • Document#inc 现在接受哈希形式的多个属性,而不是以前只能一次递增一个值。 支持别名和序列化。

    document.inc(score: 10, place: -1, lives: -10)
    
  • Document#pop 现在接受哈希形式的多个属性,而不是以前一次只能弹出一个值。 支持别名和序列化。

    document.pop(names: 1, aliases: -1)
    
  • Document#bit 现在接受哈希形式的多个属性,而不是以前一次只能应用一设立操作。 支持别名和序列化。

    document.bit(age: { and: 13 }, score: { or: 13 })
    
  • Document#pull 现在接受哈希形式的多个属性,而不是以前一次只能提取一个值。 支持别名和序列化。

    document.pull(names: "James", aliases: "007")
    
  • Document#pull_all 现在接受哈希形式的多个属性,而不是以前一次只能提取一个值。 支持别名和序列化。

    document.pull_all(names: ["James", "Bond"], aliases: ["007"])
    
  • Document#push_all 自 MongoDB 2.4中已弃用以来已被删除。 请改用Document.push

  • Document#push 现在接受哈希形式的多个属性,并且可以处理通过 $push 和 $each 将单个值或多值推送到字段的操作。 支持别名和序列化。

    document.push(names: "James", aliases: [ "007", "Jim" ])
    
  • Document#add_to_set 现在接受哈希形式的多个属性,并且支持别名和序列化。

    document.add_to_set(names: "James", aliases: "007")
    
  • Criteria 原子操作API现已更改,以匹配单文档原子API中的更改,示例:

    Band.where(name: "Depeche Mode").inc(likes: 10, followers: 20)
    
  • # 3399 #create 和 #create!关系现在可以将一大量属性作为第一个参数,以一次创建多个文档。

    person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
    person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
    
  • # 如果 Mongoid 是环境中唯一的 ODM/ORM,则3141 rake db:test:prepare可以设置所有定义的索引。

  • #3138update_attributes 现在只需调用 即可访问update

  • # 3083一个新的 rake任务:添加了rake db:mongoid:remove_undefined_indexes ,用于从数据库中删除模型中未显式定义的索引。 (艾丹·费尔德曼)

  • # 3029为具有多态关系的单个使用案例添加的relation_field字段已删除。 在此之前,以下内容可以正常运行:

    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
    

    现在需要将其建模为(使用适当的迁移):

    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现在可以正确调用 setter 方法,而不是使用write_attribute

  • # 3060允许以原子方式阻止以允许对同一类型进行多次调用。 (布莱恩·诺顿)

  • # 3037模型索引不再存储在模型类的index_options哈希中。 取而代之的是,该类现在存在一个名为index_specifications的大量,其中包含Indexable::Specification对象的列表。 这样我们就可以正确处理具有相同键但顺序不同的索引的情况。

  • # 2956现在,仅当专门调用cache时才会对查询进行缓存。 (阿瑟·内维斯)

  • # 2659 Mongoid::Railtie现在仅正确使用一个初始值设定项,且名称已更改为mongoid.load-config

  • # 2656 rake db:reseed现在是rake db:reset (Arthur Neves)

  • # 2648 Boolean变为Mongoid::Boolean ,以避免其他库常用的类污染全局命名空间。

  • # 2603现在,无论是调用 setter 还是使用 send,setter 的返回值始终是设立的值。

  • # 2597 Mongoid::Observer已根据 Rails 4删除。

  • # 2563 allow_dynamic_fields配置选项已删除,因为现在每个模型级别允许使用动态字段。 为了允许模型使用动态字段,只需在每个字段中包含该模块即可。 (乔什·马丁)

    class Band
      include Mongoid::Document
      include Mongoid::Attributes::Dynamic
    end
    
  • #2497 调用 to_json 不再篡改驾驶员的返回值,并且会正确返回 { "$oid" : object_id.to_s } 而不是之前的string表示形式。

  • # 2433 Mongoid::Paranoia已被删除。

  • # 2432 Mongoid::Versioning已被删除。

  • # 2218如果范围不复杂,现在创建或实例化具有默认范围的文档会将默认范围应用文档。

  • # 2200批量赋值安全性现在反映了 Rails 4的行为。 without_protection选项也被删除。 attr_accessible类方法已被删除。 Mongoid 和强参数对于批量赋值保护应该可以正常工作。

  • delete_alldestroy_all不再采用:conditions哈希,而仅采用原始属性。

  • # 现在,使用#only#without从条件加载的1908文档现在会在尝试保存、更新或删除这些记录时引发错误。 此外,从数据库检索的字段中排除的字段在尝试访问权限这些字段时也会引发异常。

  • # 现在可以在atomically区块中执行1344原子更新,这将延迟调用区块的文档上的任何原子更新,直到区块完成。

    更新调用可以在区块中正常执行:

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

    该文档也会屈服于区块:

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

    原子命令具有流畅的接口:

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

    如果在没有atomically区块的情况下利用 Fluid 接口,则这些操作将在单独的调用中持续存在。 示例,在没有提供区块的情况下,以下代码会访问数据库3次:

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

    该区块一次仅适用于1文档,因此嵌入式文档更新和根文档更新此时不能混合使用。

新增功能

  • Mongoid 现在使用 ActiveSupport::LogSubscriber订阅日志,并使用 ActiveSupport::Notifications 发送操作日志。 (Arthur Neves)日志订阅示例:

    ActiveSupport::Notifications。 订阅(' 查询.moped') do |事件| .. end

  • 字段类型现在可以使用符号和类名。 有关可用映射,请参阅github.com/mongoid/mongoid/blob/master/lib/mongoid/fields.rb#L 16

  • # 现在可以使用以下方法将3580字段重置为其默认值:

    document.reset_name_to_default!

  • # 3513文档现在有一个#destroy!方法,如果销毁回调返回 false 值,该方法将引发Mongoid::Errors::DocumentNotDestroyed错误。

  • # 3496添加了类级别和条件级别find_or_create_by!

  • # 3479如果输出不是内联的,则 Map/reduce 现在遵循没有超时选项的条件。

  • # 3478 Criteria 对象现在有一个 #none 方法,该方法将导致条件永远不会命中数据库并始终具有零个文档。

    Band.none Band.none.where(name: "Tool") # 文档始终为零。

  • # 3410 Mongoid 现在具有查询缓存,可在机架应用程序中用作中间件。 (阿瑟·内维斯)

    对于 Rails:

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

  • # 现在可从文档实例重置3319计数器:

    文档.reset_counters(:relation)

  • # 3310 embedded_in 关系现在接受touch选项来更新父项。

  • # 使用alias_attribute的3302别名现在可以正确处理条件中的别名。

  • # 如果提供了3155范围字段,则它会保留排除_结束。 (Daniel Libanori)

  • # 3146添加 :overwrite字段选项,为 true 时,不会检查重复项。 (Daniel Libanori)

  • # 3002现在,重新加载 Rails 控制台也会清除 Mongoid 的身份映射。

  • # 2938已添加配置选项duplicate_fields_exception ,如果设立为true ,则会在定义将覆盖现有方法的字段时引发异常。 (阿瑟·内维斯)

  • #2924 MongoDB 2.4 beta文本Atlas Search现在拥有 Mongoid 提供的 DSL。 与其他查询一样,文本搜索也是延迟求值的,并且可以在类或条件级别之外使用。

    请注意,任何提供text_search方法的3第三方 gem 现在将不再与 Mongoid 一起使用,并且需要更改其语法。 示例:

    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现在可以为关系提供多个扩展。 (Daniel Libanori)

已解决的问题

  • # 3676利用嵌入式关联使 pluck 发挥作用 (Arthur Neves)

  • # 2898脏属性方法现在可以正确处理字段别名。 (尼尔斯·甘瑟)

  • # 3620将 ActiveModel 模块实例方法添加到 Barcelable_methods 列表中。 (阿瑟·内维斯)

  • # 3610不允许对只读属性执行原子操作 (Frederico Araujo)

  • # 3619不验证标记为销毁的文档。 (克里斯托弗·J·博塔罗)

  • # 3617不要跳过循环文档上的索引创建。 (shaiker)

  • # 3568修复了当前本地化字段缺失属性的错误。

  • # 3514修复查询缓存以处理首次/最后一次调用。

  • # 3383 /# 3495修复 has_and_belongs_to_many 热切加载。 (阿瑟·内维斯)

  • # 3492 $rename 操作不应将值 Mongoize。 (Vladislav Melanitskiy)

  • # 3490允许本地化字段使用布尔false值。

  • # 3487在字段定义中将布尔值映射到 Mongoid::Boolean。 (阿瑟·内维斯)

  • # 3449触摸需要用于创建和更新。 (格雷戈里·罗斯迈尔)

  • # 3347现在,从嵌入式关系的作用域创建文档时,可以正确设置创建的子文档的父文档。

  • # 3432修复了 DateTime mongoization 丢失精度的问题。

  • # 3397修复了嵌入式文档的 $ne 匹配器,以匹配服务器行为。

  • # 3352允许名为 "open" 的命名作用域通过1 -n 关系运行。

  • # 3348修复具有相同键但方向不同的复合索引。 (阿瑟·内维斯)

  • # 2701修复对 belongs_to 绑定的额外的查询。 (阿瑟·内维斯)

  • # 3089允许将字符串去鬼化为浮点数 (Daniel Libanori)

  • # 3278计数器缓存也应更新内存中的文档。 (阿瑟·内维斯)

  • # 3242 Has_many 关系必须使用反向foreign_key。 (阿瑟·内维斯)

  • #3233 在级联子项和关系验证打开时,不要double调用验证回调。

  • # 3197改进了对根集合和嵌入式集合上aggregates的调用。 (沃伊切赫·皮耶库托夫斯基)

  • # 3144 /# 3219修复 @_children ivar 上的名称冲突。 (阿瑟·内维斯)

  • # 3088范围字段可以接受哈希值,该哈希值可以是来自数据库的属性。 (Daniel Libanori)

  • # 3116关系实例变量现在全部以_为前缀。

  • # 3093仅在原子推送数组时展平1级别。

  • # 3063 Document#becomes现在可以在出现错误时正确设置基本对象。 (亚当·罗斯·科恩)

  • # 如果文档未持久化, 3019原子操作将不再尝试持久化。

  • #2903 删除未使用的string to_a 扩展。

3.1.7

已解决的问题

  • # 3465修复了当 inverse_of设立为 nil 时出现的歧义关系错误。

  • # 3414向后移植聚合的跳过和限制选项。 (沃伊切赫·皮耶库托夫斯基)

  • # 3469修复 RegexpError: failed to分配内存: /./ on .hash_dot_syntax? (德米特里·克拉斯努霍夫)

3.1.6

已解决的问题

  • # 3337确保通过继承来克隆本地化字段映射。

  • # 3262修复了 HABTM 外键字段上的原子大量操作将单个元素转换为数组的问题。

  • # 3282修复 .timeless 选项以使用线程局部属性而不是类属性。 同时从所有Docs删除timeless 方法,仅添加到时间戳Docs中。 (阿瑟·内维斯)

3.1.5

已解决的问题

  • # 3231允许代理文档的演变以在条件中工作。

  • # 3247将对 tzinfo 的依赖关系提高到0.3.29 。

  • # 3203修复了多态关系的index: true规范。

  • # 3192修复别名字段 + 带验证的本地化字段组合。 (约翰尼·小丝)

  • # 3173修复了与自定义主节点 (primary node in the replica set)键有关的多对多关系的问题。 (孙博文)

  • # 3159更新或插入现在可以正确地将文档标记为已持久保存。

  • # 3137允许连续使用多个带有 ID 的belongs_to集。

  • #3079 具有偏执父母的嵌入式Docs在从数据库重新加载时会丢失_id ,因为它们没有持久化的权限? 值。 (阿瑟·内维斯)

  • # 3081 Criteria 的method_missing现在会在调用条目之前检查大量是否响应提供的方法,以便在引发NoMethodError时不会影响数据库。

  • # 3068修复了设立MONGOID_SPEC_PORT时规范在非标准MongoDB端口上运行的问题。

  • # 3047确保blank?empty?不会因条件缺少方法而出现问题。

  • 在 cache_key 上包含 updated_at,即使是短时间戳 (Arthur Neves)

3.1.4

已解决的问题

  • # 3044确保可枚举目标与 case 语句中的数组匹配。

  • # 3034 first_or_create on 标准现在可以正确传递要创建的区块,而不是在创建文档后调用。

  • # 3021已从初始化程序中删除mongoid.yml警告,现在由会话配置选项处理。

  • # 3018唯一性验证器现在可以正确序列化其检查中的值。 (杰里·克莱恩史密斯)

  • # 3011修复了对唯一性验证的别名字段支持。 (约翰尼·小丝)

  • # 3008修复了当作用域是在类加载帖子添加时,子类无法正确继承作用域的问题。 (Mike Dillon)

  • # 2991 Document.timeless现在可以正确地将范围限定为实例而不是线程。

  • # 2980动态字段现在可以正确处理哈希和数组的就地编辑。 (马修·维德曼)

  • # 2979 pluck不再就地修改上下文。 (布赖恩·高夫)

  • # 2970修复了计数器缓存,以便正确使用关系名称(如果可用),如果不可用,则使用反向类名称。

  • # 如果在关系上定义了2959嵌套属性,则现在将遵循autosave: false

  • # 2944修复当不区分大小写为 true 时本地化字段的唯一性验证。 (弗拉基米尔·朱可夫)

3.1.3

已解决的问题

  • 调用 has 方法后保存时,不要复制嵌入文档。 (阿瑟·内维斯)

  • # 2961现在,重新加载 mongoid.yml 配置会正确清除以前配置的会话。

  • # 2937计数现在可以采用true参数来考虑 skip 和 limit。 (阿瑟·内维斯)

  • # 2921如果未使用继承,请勿在身份映射选择中使用类型。 (阿瑟·内维斯)

  • # 2893删除了集合名称和数据库名称的记忆功能,因此带有store_in的 lambda 在更改时可以正常工作。

  • #2911 如果传递的是大量,则处理嵌套属性时 1-n 关系上的 _destroy 属性现在可以是string或符号。

  • # 2886修复了 Rails 生成器的命名空间问题。

  • # 2885修复别名字段的接触问题。 (尼尔斯·甘瑟)

  • # 2883允许循环关系不引发混合关系错误。

  • # 2867 pluck现在可以正确处理别名字段。

  • # 2862自动保存不再执行额外的不必要的查询。 (阿瑟·内维斯)

3.1.2

已解决的问题

  • # 2851修复了 NaN 值的 BigDecimal degogoization。 (nkem)

  • # 2848修复touch ,使其在使用短时间戳时正常运行。 (阿瑟·内维斯)

  • # 2840修复端到端no_timeout选项处理。

  • # 2826动态字段现已正确货币化。

  • # 2822关系的编组负载现在可以正确重新应用扩展。

3.1.1

已解决的问题

  • # 2839验证已修复为使用类型转换值,但数值验证器除外。 (莱尔森·班代拉)

  • # 2838 store_in选项现在可以正确合并而不是覆盖。 (科林·麦肯齐)

3.1.0

新增功能

  • 最低 MongoDB 要求现已提高到2.2 ,因为我们现在依赖于聚合框架。

  • 最小 Active Model 和 Active Support 依赖项已提高至3.2 。

  • # 2809关系现在可以指定要使用的主键,而不是外键上的 ID。

    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 $geoNear支持现已添加到条件中。

    Bar.where(:likes.gt => 1000).geo_near([ 52, 13 ])
    Bar.geo_near([ 52, 13 ]).max_distance(0.5).spherical
    
  • # 2799 Criteria#map 现在可以接受字段名称的符号以及用于执行更优化的map的区块。 (Gosha Arinich)

    Band.where(:likes.gt => 1000).map(:name)
    
  • # 2798聚合( summinmaxavg )现在使用聚合框架,而不是 map/reduce。 (Gosha Arinich)

  • # 2776 MongoDB 2.4 .x 现在支持新的索引类型:“ 2 dsphere”、“text”和“hashed”。 (Irakli Janiashvili)

  • # 现在支持来自 origin 的2767 $maxScan 支持。 (乔纳森·海曼)

  • # 2701清理额外的具有1 - 1关系的数据库查询。

  • # 2693自定义集合名称可以传递给模型生成器。 (Subhash Bhushan)

    rails g model band --collection=artists
    
  • # 2688 Model.createModel.create!现在可以采用属性哈希大量来同时创建多个文档。 如果提供了属性大量,则返回文档大量。

    Band.create([{ name: "Tool" }, { name: "Placebo" }])
    Band.create!([{ name: "Tool" }, { name: "Placebo" }])
    
  • # 2670取消设置字段现在接受多个字段,而不仅仅是1 。 (阿瑟·内维斯)

    band.unset(:name, :founded)
    Band.where(name: "Placebo").unset(:members, :origin)
    
  • # 2669现在,将区块传递给Criteria#new会正确地将区块发送到模型的构造函数。 (阿瑟·内维斯)

  • # 如果内存中有必要信息,则2667 exists?不再访问数据库。

  • # 2665 Mongoid 现在支持belongs_to关系的计数器缓存。 (阿瑟·内维斯)

    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
    
  • # 具有belongs_to关系的2662嵌入式文档现在可以预先加载。

  • # 2657记录器便捷的 getter 和 setter 方法已添加到Config模块中。 (阿瑟·内维斯)

  • # 如果索引只存在于默认以外的数据库中,则2615索引选项现在可以采用特定数据库名称。

    class Band
      include Mongoid::Document
      index name: 1, { database: "another_db" }
    end
    
  • # 2613过程现在可以作为值提供给store_in

    class Band
      include Mongoid::Document
      store_in database: ->{ Thread.current[:database] }
    end
    
  • # 2609将 batch_size 选项传递给查询。 (马丁·莫奇)

  • # 2555现在,当文档 ID 的类型为哈希时,将哈希传递给find可以正常运行。 (Szymon Kurcab)

  • # 2545 $位置操作符用于在适当的情况下更新嵌套1级深度的嵌入式文档的选择器。

  • # 2539 Mongoid.models现在会跟踪应用程序中的所有模型,以便更准确地确定索引rake 任务等操作的模型。 (阿拉·霍华德)

  • # 2525添加了使用带别名的短时间戳字段的能力。 这会将时间戳字段设置为c_atu_at ,为方便起见,它们也被别名为created_atupdated_at 。 (罗德里戈·齐藤)

    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
    
  • # 2465文档现在有一个attribute_before_type_cast ,用于正确处理验证。 (Gerad Suyderhoud)

  • # 2443 expire_after_seconds现在是有效的索引选项( www.mongodb.com/zh-cn/docs/manual/core/indexes/#ttl-indexeswww.mongodb.com/zh-cn/docs/manual/tutorial/expire-data /)。

    class Event
      include Mongoid::Document
      field :created_at, type: DateTime
      index({ created_at: 1 }, { expire_after_seconds: 3600 })
    end
    
  • # 现在,当创建或销毁子文档时,将自动触及带有touch: true选项的2373关系。

  • 添加了Document.first_or_create!Criteria#first_or_create! 。 如果创建验证失败,则会引发验证错误。

    Band.where(name: "Depeche Mode").first_or_create!
    Band.where(name: "Tool").first_or_create!(active: true)
    
  • 添加了Document.first_or_initializeCriteria#first_or_initialize 。 这与first_or_create相同,但如果未找到任何文档,则会初始化一个新的(非持久化)文档。

    Band.where(name: "Depeche Mode").first_or_initialize
    Band.where(name: "Tool").first_or_initialize(active: true)
    
  • 添加了与 Active Record 类似的Model.pluckCriteria#pluck ,它们返回所提供字段的值的大量。 (杰森·李)

    Band.where(name: "Depeche Mode").pluck(:_id)
    Band.where(name: "Tool").pluck(:likes)
    
  • # 2324嵌入许多关系现在可以正确处理delete_if

  • # 2317添加了Document.first_or_createCriteria#first_or_create 。 这将返回第一个匹配的文档,如果文档不存在,则创建具有附加属性的文档。 (incorvia)

    Band.where(name: "Depeche Mode").first_or_create
    Band.where(name: "Tool").first_or_create(active: true)
    
  • # 2292添加了Model.each_with_index

  • # 2285 Config.load_configuration现在对于那些想要直接从哈希实例化设置的用户是公开的。

  • # 2275添加了 rake任务db:mongoid:purge ,该任务将删除除默认数据库中的系统集合之外的所有集合。

  • 从数据库返回文档时添加了 # 2257 after_find回调。

    class Band
      include Mongoid::Document
    
      after_find do |doc|
        # Some logic here.
      end
    end
    
  • # 2223允许通过 JavaScript 查找文档,其参数可防止通过Model.for_js进行 JavaScript 注入。

    Band.for_js("this.name = param", param: "Tool")
    Band.where(:likes.gt => 1000).for_js("this.likes < this.follows")
    
  • # 2197当提供没有端口的会话配置时,Mongoid 现在将默认这些端口为27017 。

  • # 2180 1 -n 和 nn 关系现在支持添加/删除前后回调。 (罗德里戈·齐藤)

    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#updateCriteria#update_all现在会根据字段类型对值进行序列化。

  • # 2022自定义回调现在可以通过使用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如果外键为空大量,多对多关系不会接触数据库。

  • # 1564现在,仅当关系被访问时,多对多外键才延迟设立默认。 这样可以避免在关系未被触及的情况下存储空数组。

已解决的问题

  • # 2730对上下文调用 sort 会正确更新上下文的条件。 (阿瑟·内维斯)

  • # 2719 distinct现在可在类级别使用。

    Band.distinct(:name)
    
  • # 2714现在,当新会话具有不同数据库时,覆盖会话也将在运行时正确切换数据库。

  • # 2697修复了包含从同一类继承的多个模型时的预先加载问题。 (基里尔·拉扎列夫)

  • # 2664现在,提供多个字段时,嵌入式文档的内存排序功能可以正常运行。 (尼尔·弗里德曼)

3.0.24

已解决的问题

  • 新文档上的 # 2879 remove_attribute不再创建不必要的 $unset 操作。

3.0.23

已解决的问题

  • # 2851修复了 NaN 值的 BigDecimal degogoization。 (nkem)

  • # 2841现在,在父更新过程中对嵌入调用delete_alldestroy_all可以正确执行删除。 (阿瑟·内维斯)

  • # 2835修复了清除唯一性验证器中持久性选项的问题。

  • # 2826动态字段现已正确货币化。

  • # 2822关系的编组负载现在可以正确重新应用扩展。

  • # 2821应在继承类中复制自动保存的关系。

3.0.22

已解决的问题

  • # 2812修复了当基本文档已销毁且外键尚未延迟求值时多对多关系的条件。

  • # 2796使用删除进行分配时,不要级联对 has_many 关系的更改。

  • # 2795修复时间转换的精度。 (Tom de Bruijn)

  • # 2794读取关系进行验证时不要自动构建。

  • # 2790 becomes现在会复制嵌入式文档,即使它们受批量赋值保护也是如此。

  • # 2787允许becomes替换身份映射中的文档。

  • # 2786修复了销毁时未触发的回归级联回调。

  • # 2784修复了正确添加到子类中的唯一性验证问题。 (Takeshi Akima)

3.0.21

已解决的问题

  • # 2781 / * # 2777 - 修复了仅存在于 Rails 环境中的DateTime序列化问题。

3.0.20

已解决的问题

  • # 2774确保唯一性、存在性和关联性的验证宏在实例级别也可用。

  • # 2772克隆文档时,现在可以正确处理本地化字段。

  • # 当无法常量化类时, 2758 Mongoid.create_indexes不会失败。 (阿瑟·内维斯)

  • # 加载修订时, 2743持久性选项不再被清除。 (阿瑟·内维斯)

  • # 2741修复 MRI 和 JRuby 上的时间 mongoization usec 舍入错误。

  • # 使用点表示法的read_attribute时, 2740支持哈希字段中的整数键。

  • # 2739确保整数反序列化正确转换为整数。

  • # 如果文档已持久化, 2733与inverse_of: nil的多对多关系不会持久化<<push上的反向关系。

  • # 2705修复了何时可以将子项添加到级联回调列表的逻辑。

3.0.19

已解决的问题

  • 已发布以恢复 # 2703中的更改。

3.0.18

已解决的问题

  • # 2707现在,可以正确调用find_or_create_byfind_by_initialize_by来关闭具有链式条件或作用域的关系,以使新文档或找到的文档上的关系保持不变。

  • # 2699现在,重置字段会从已更改属性列表中删除该名称。 (Subhash Bhushan)

  • # 根据条件执行原子操作时,现在支持2683别名字段。 (阿瑟·内维斯)

  • # 2678在没有匹配文档的情况下调用Criteria#sum会返回0而不是nil

  • # 2671匹配器现在可以正确处理符号键。 (乔纳森·海曼)

3.0.17

已解决的问题

  • # 2686修复了损坏的 Moped 依赖项 - Moped 现在必须至少为1.2.0版本。

3.0.16

已解决的问题

  • #2661 model_name为文档实施实例级别 。

  • #2651 确保 Criteria#type 适用于选择器中的符号键和string键。

  • # 2647确保偏执文档上的deleted?destroyed?返回相同的值。

  • # 2646在让出区块之前,在可枚举目标的内存中设置已卸载的文档。

  • # 2645请求计数时考虑缓存。 (亚瑟·诺盖拉·内维斯)

  • # 2642不要在嵌入式文档上批处理推送空数组。 (Laszlo Bacsi)

  • # 2639在建立新记录的关系时,避免对新记录进行额外的不必要的查询。

  • # 2638当条件预先加载时,调用firstlast ,然后迭代整个结果,从而正确预先加载完整请求。

  • #2618 现在默认,验证唯一性时始终使用string一致性。

  • # 2564修复了以下情况的无限递归:关系 getter 被覆盖并从该方法调用 setter。

  • # 2554确保unscoped上的embeds_many不包括标记为销毁的文档。

3.0.15

已解决的问题

  • # 2630修复元数据存在但未定义级联时的级联问题。

  • # 2625修复代理和条件对象的Marshal.dumpMarshal.load

  • # 2619修复了观察器上的observed_classes在观察自定义模型时返回的类。

  • # 2612 DocumentNotFound错误现在会在错误实例中公开该类。

  • #2610 确保在具有排序选项的 之后调用first last来重置排序。

  • # 2604检查拉取和推送是否存在更新冲突。 (卢卡斯·苏扎)

  • # 2600使用多参数属性时,为属性实例化适当的类类型。 (xxswingxx)

  • #2598 修复对使用嵌入式Docs的本地化字段进行排序的问题。

  • # 2588阻止为动态属性定义无效的 Ruby 方法。 (马特·桑福德)

  • # 2587修复重置关系卸载条件时与belongs_to代理发生冲突的问题。

  • # 2585确保会话配置选项作为符号传递给 Moped。

  • # 2584如果输出设立为inline ,则允许在从节点上进行 map/reduce 操作。

  • # 2582确保nil会话覆盖绝不会导致访问权限名为nil的会话。

  • # 2581重新加载文档时使用强一致性。 (马克·克雷默)

3.0.14

已解决的问题

  • # 2575防止月末时间四舍五入,因为浮点数不够精确,无法处理usec。 (史蒂夫·瓦莱蒂斯)

  • # 2573不要将18 n 用于检查消息。

  • # 2571从区域设置中删除空白错误消息。 (Jordan Elver)

  • # 2568修复同时提供作用域时本地化字段的唯一性验证问题。

  • # 2552确保当嵌入式文档尝试从根选择器获取路径时引发InvalidPath错误。

3.0.13

已解决的问题

  • # 2548修复使用 gemset 中包含 Unicorn 的新应用生成配置文件时的错误。

3.0.12

已解决的问题

  • # 2542允许嵌入式文档使用store_as在条件中正确别名。

  • # 2541确保通过Document#becomes向上转换/向下转换文档时类型更改正确 (Łukasz Bandzarewicz)

  • # 2529子类上的字段会覆盖父类中的字段(两者都有带有过程的默认值),现在可以正确覆盖子类中的默认。

  • # 子类化时需要复制2528别名字段。

  • #2527 确保在设置为空大量时删除 has_many 中的Docs会执行多重更新。

3.0.11

已解决的问题

  • # 2522修复了Criteria#with以返回条件而不是类。

  • # 2518修复使用 Passenger 时身份映射的工作单元调用。

  • # 2512确保当多个层级深度时,嵌套属性销毁可与3.0.10中引入的延迟销毁一起使用。

  • # 2509当返回的值为空额外的时,不要再次命中身份映射。 (Douwe Maan)

3.0.10

已解决的问题

  • #2507 确保当预先加载混合具有和不具有Docs的父项时,没有额外的数据库命中。 (Douwe Maan)

  • # 2505确保条件中的updateupdate_all正确处理别名字段。 (德米特里·克拉斯努霍夫)

  • # 2504 Model#becomes正确保留相同的 ID。

  • # 2498条件现在可以正确通过method_missing传递提供的区块。

  • # 以前存储时没有 ID 的2496嵌入式文档现在可以在 Mongoid 中正确更新并获取分配的 ID。

  • # 2494现在,所有显式原子操作都可以正确遵循别名字段。

  • # 2493在设置多态类型时使用Class#name而不是Class#model_name ,以防 case model_name已被覆盖。

  • # 2491删除了可级联子项中不必要的合并调用。

  • # 2485删除索引现在始终使用强一致性。

  • # 2483版本控制现在可以处理本地化字段。 (劳伦斯·柯蒂斯)

  • # 2482将查找参数存储在DocumentNotFound错误中。

  • #2481 Map/reduce 聚合现在可以正确处理mongo以 100 为一组的 Reduce 作业批处理,并在计数时传递状态。

  • # 2476妥善处理 embeds_many 关系上的跳过和限制范围之外的问题。

  • # 2474在子项尚未加载时正确分离1 - 1关系。 (Kostyantyn Stepanyuk)

  • # 2451 relation.deleted现在可在嵌入式偏执文档上正常运行。

  • # 2472确保嵌入式关系上的update_all在实际没有更新任何内容时正常工作。

  • # 2469现在可以使用内存实例中的相同文档重新添加关系上无效的文档。

  • # 2454 Model#as_document正确允许从具有关系更改为被删除的关系。 (詹姆斯·阿尔蒙德)

  • # 2445 Mongoid 中间件现在可以正确支持普通响应和流式响应,并正确清除任一响应的身份映射。

  • 在父验证失败的情况下,通过嵌套属性删除的 # 2367嵌入式文档不再立即从关系中删除。 相反,它们会被标记为要销毁,然后在父级通过验证并持续存在时将其删除。

请注意,这是一项行为变更,但由于API没有改变,而且之前的行为不正确且与 AR 不匹配,因此可以Go单点发布。

3.0.9

已解决的问题

  • # 2463修复了新存储库中损坏的rails g mongoid:config

  • # 2456现在,再次继承文档时,会重置后代缓存。 (Kostyantyn Stepanyuk)

  • # 2453 Model#write_attribute现在可以正确处理别名字段。 (坎贝尔·艾伦)

  • # 2444删除了额外的脏方法创建调用。 (Kostyantyn Stepanyuk)

  • # 2440 /# 2435通过嵌套属性或嵌入式文档进行设置时,将批量赋值选项传递给子项。

  • # 2439修复了返回字段的线程选择中的内存泄漏问题。 (蒂姆·奥尔森)

  • mongoid/moped# 82别名字段现在可与Criteria#distinct一起使用。

  • # 2423修复了嵌入式文档的update_all ,以便在使用 off 条件时执行正确的 $ 设立 。

  • # 2414索引定义现在会考虑别名字段。

  • # 2413可枚举目标现在可以在未提供区块时正确返回枚举器。 (安德鲁·史密斯)

  • # 对整数和浮点数进行 mongoizing 时, 2411 BigDecimal 字段会正确存储为字符串。

  • # 2409如果以编程方式配置,则不要警告缺少 mongoid.yml。

  • #2403 update_all对于许多没有文档的嵌入,对 返回 false。

  • # 2401恢复将条件与哈希合并的能力。

  • # 2399拒绝 has_many 上的空 ID 值Model#object_ids= 。 (蒂亚戈·拉斐尔·戈迪尼奥)

  • # 2393确保在使用多态关系时遵循inverse_of

  • # 2388 Map/reduce 在执行命令时正确使用sort而不是orderby 。 (Alex Tsibulya)

  • # 2386允许在索引中使用 geo haystack 和 bits 参数。 (布拉德利·里斯)

  • # 2380 Model#becomes现在可以正确复制脏属性。

  • #2331 在 after_create回调中调用额外的保存时,不要double推送子文档。

3.0.8 (已拉出)

3.0.6

已解决的问题

  • # 2375唯一性验证范围现在适用于别名字段。

  • # 2372确保所有原子操作在执行前将值 mongoize。

  • # 使用dependent: :restrict时, 2370偏执文档现在不会被正确删除,并且会引发异常。

  • # 2365尝试用同一文档替换 embeds_one 时,请勿执行任何操作。

  • # 2362不需要时,不要将字段值的倒数存储在数据库中。 (当同一类上定义的多态父项不超过一个时)。

  • # 2360克隆文档应忽略批量赋值保护规则。

  • # 2356通过only限制查询中返回的字段时,请确保限制范围为模型。

  • # 2353允许update_attribute正确处理别名字段。

  • #2348 如果string无效,则将字符串转换为时间应引发参数错误。 (坎贝尔·艾伦)

  • # 2346确保belongs_to关系在传递代理而不是文档时可演变。

  • # 2334修复当字段有时不存在时聚合map/reduce 的问题。 (詹姆斯·麦金尼)

  • # 2330修复了当应用了限制对文档进行迭代时,条件上的 #size 和 #length 不一致的问题。

  • # 2328确保排序适用于所有关系条件(如果已定义)。

  • # 2327如果文档无法执行回调,则不要从基本文档执行回调。

  • # 2318确保在“浮点数”字段上设置任何数字时,即使提供的数字是整数,实际上也是将其设置为浮点数。

3.0.5

已解决的问题

  • # 2313修复了nil TimeWithZone字段的反序列化问题。 (nagachika)

  • # 2311 Document#changes不再为仅被访问且未实际更改的数组和哈希字段返回nil值。 从2.4 .x 进行回归。

  • # 2310在内存中连续设置多对多重复项不会再清除反向外键。

  • # 2309允许使用初始设立以外的哈希值来设立embeds_one 关系。

  • # 2308确保通过#findhas_manyhas_and_belongs_to_many关系上检索的文档保留在内存中。

  • # 2304现在,当 AR 按照预期定义了多个默认作用域时,可以正确合并而不是覆盖默认作用域。 (基里尔·马克西莫夫)

  • # 2300确保重新加载会刷新身份映射中的文档。

  • # 2298防止多对多关系拉取空的 ID设立。 (乔纳森·海曼)

  • # 2291修复触摸操作仅用于更新时间戳和可选字段,而无论文档上有什么其他更改。

  • # 1091如果值为false ,则允许通过存在验证。

3.0.4

已解决的问题

  • # 2280修复当关联的任一端都存在排序默认范围时多对多关系的同步。

  • # 2278 Criteria#update现在仅正确更新第一个匹配的文档,而Criteria#update_all将更新所有匹配的文档。 (无标志与多标志)。

  • # 2274加载模型时,如果出现错误,则发出警告,但会继续处理。

  • # 2272删除实际 nil 值的默认作用域时,不要擦除选择器或选项。 必须检查密钥是否也存在。

  • # 2266恢复的偏执文档不再被标记为已损坏。 (Mario Uher)

  • # 2263确保多对多关系上的非对象ID 外键转换发生在初始设立,而不是在验证时。

3.0.3

已解决的问题

  • # 2259确保子类文档无法通过具有父类型或同级类型的同一集合中的另一个文档的 ID 从身份映射中提取。

  • # 2254 $inc 操作不再将所有值转换为浮点数。

  • # 2252在回调终止之前不要触发自动保存。

  • # 2248改进了exists?在条件和关系上的性能。 (乔纳森·海曼)

3.0.2

已解决的问题

  • # 2244消除嵌套属性中的 ID 批量分配警告。

  • # 2242修复急切加载,从而在调用 first 或 last 时不加载所有文档。

  • # 2241 Map/reduce 操作现在始终使用强一致性,因为它们在大多数时候都有可能写入集合。

  • # 2238确保 nn 个外键字段被标记为可调整大小,以防止在使用#only和更新时nil -> []发生更改。

  • # 2236将文档实例保留在可通过documentrecord访问的验证异常中。

  • # 2234确保使用自定义选项持久化文档时的验证正常运行,如果验证通过,请勿清除验证。

  • # 2224 Model#inc现在接受BigDecimal值。

  • # 2216修复了连续设置多次时嵌入一个关系上的元数据分配问题。

  • # 2212确保在所有情况下使用validate: false保存后错误均已清除。

  • # 2207预先加载 ID 时,必须对查询进行欺骗,以避免多次迭代出现未获取必填字段的问题。

  • # 2204将无效(非关系,或超过1级别)的参数传递给Criteria.includes时引发InvalidIncludes错误。

  • # 2203 Map/Reduce 现在可以与Model#with一起正常运行。

    Band.
      with(session: "secondary").
      where(:likes.gt => 100).
      map_reduce(map, reduce).
      out(inline: 1)
    
  • # 2199现在,自动添加存在验证时会考虑 Autosave false。 (约翰·西永)

3.0.1

已解决的问题

  • # 2191确保错误消息生成方法具有适当的可见性(私有)。

  • # 2187确保所有级别的嵌套文档都在 JSON 中序列化。

  • # 2184允许与 Ruby 核心方法冲突的关系名称通过存在性检查。

  • # 如果没有提供其他排序条件,则2181确保.first条件按 ID 升序排序。

3.0.0

新增功能

  • # 2151在持久性之前请求元数据时,如果元数据不存在,Mongoid 现在将引发Mongoid::Errors::NoMetadata错误。

  • # 2147 Model#becomes现在会复制嵌入文档。

  • 引入了一个新的回调: upsert ,该回调会在调用document.upsert时运行,因为 Mongoid 不知道该文档是被视为新文档还是持久文档。 随之而来的是模型回调:

    before_upsert
    after_upsert
    around_upsert
    
  • # 2080 /# 2087对于Model#with不可行的情况,现在可以在全局级别覆盖 Mongoid 持久保存到的数据库或会话。

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

    请注意,此选项是全局选项,会覆盖当前线程上的所有模型。 如果您不再希望进行覆盖,则开发人员有责任记住将其重新设立为 nil。

    Mongoid.override_database(nil)
    Mongoid.override_session(nil)
    
  • # 1989条件countsizelength现在在数据库访问权限方面表现为 Active Record。

    Criteria#count 将始终访问数据库以获取计数。

    Criteria#length 如果尚未加载条件, Criteria#size将命中数据库一次,后续调用将返回缓存的值。

    如果条件已被迭代或加载, lengthsize将永远不会访问数据库。

  • # 1976当基本查询返回零个结果时,预加载不再生成查询。

  • Model.find_by 现在接受一个区块,如果该区块不为零,则让出找到的文档。

    Band.find_by(name: "Depeche Mode") do |band|
      band.likes = 100
    end
    
  • # 1958 /# 1798文档和belongs_to关系现在支持触摸。

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

    将文档的 updated_at 时间戳更新为当前时间。 这也将更新任何可接触关系的时间戳。

    Band.first.touch
    

    将特定时间字段与 udpated_at 一起更新。

    Band.first.touch(:founded)
    

    这不会触发任何验证或回调。

  • Mongoid 现在支持 MongoDB 的 $findAndModify 命令。

    Band.find_and_modify("$inc" => { likes: 1 })
    
    Band.desc(:name).only(:name).find_and_modify(
      { "$inc" => { likes: 1 }}, new: true
    )
    
  • # 1906 Mongoid 在提供多个要查找的 ID 时将从身份映射中检索文档。 (汉斯·哈塞尔伯格)

  • # 如果向嵌入式集合上的 where 子句提供 JavaScript表达式, 1903 Mongoid 会引发错误。 (塞巴斯蒂安·阿齐米)

  • 聚合现在遵循 Mongoid API及其可枚举对应项(如果适用)。

    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
    

    请注意,当提供字段名称但未提供区块时,将返回单个数值,但提供区块时,将返回具有最小/最大值的文档。 这是因为 Ruby 的 Enumerable API规定,在提供区块时,会返回匹配的元素。

    提供区块时,所有文档都将加载到内存中。 提供符号时,通过服务器上的 map/reduce 处理执行。

  • 现在提供了厨房水槽聚合方法,只需一次调用即可获取字段的所有内容。

    Band.aggregates(:likes)
    # =>
    #   {
    #     "count" => 2.0,
    #     "max" => 1000.0,
    #     "min" => 500.0,
    #     "sum" => 1500.0,
    #     "avg" => 750.0
    #   }
    
  • 为方便起见,现在为 map/reduce 操作提供了符合条件API的 DSL。

    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 现在将 origin 用于其 Criteria API。 有关文档,请参阅 origin 存储库和API Docs 。

  • # 1861 Mongoid 现在在无法确定关系的反向且有多个潜在候选关系时会引发AmbiguousRelationship错误。 (汉斯·哈塞尔伯格)

  • 您现在可以直接根据条件执行解释。

    Band.where(name: "Depeche Mode").explain
    
  • # 现在可以链接一对多关系上的1856推送。

    band.albums.push(undertow).push(aenima)
    
  • # 1842 MultiParameterAttributes 现在支持别名字段。 (安东·奥廖尔)

  • # 1833如果尝试在未定义父文档的情况下保存嵌入式文档,Mongoid 现在将引发Mongoid::Errors::NoParent异常。

  • 添加了与 ORM 无关的方法来获取字段名称

    class Band
      include Mongoid::Document
      field :name, type: String
    end
    
    Band.attribute_names
    
  • # 关系上的1831 find_or_create_by现在接受批量赋值和类型选项。 (小野达也)

    class Band
      include Mongoid::Document
      embeds_many :albums
    end
    
    band.albums.find_or_create_by({ name: "101" }, LP)
    
  • # 1818添加功能以选择用于存储embeds_many关系的键。 (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" }]}
    
  • # 1806 Model.find_or_create_byModel.find_or_initialize_by现在可以将文档作为 belongs_to 关系的参数。

    person = Person.first
    Game.find_or_create_by(person: person)
    
  • # 1774关系现在为依赖关系提供了 :restrict 选项,在尝试删除仍有子项的父项时,该选项会引发错误。 (汉斯·哈塞尔伯格)

    class Band
      include Mongoid::Document
      has_many :albums, dependent: :restrict
    end
    
    band = Band.first
    band.albums << Albums.first
    band.delete # Raises DeleteRestriction error.
    
  • # 1764添加方法以检查字段是否与默认值不同。

    class Band
      include Mongoid::Document
      field :name, type: String, default: "New"
    end
    
    band = Band.first
    band.name_changed_from_default?
    
  • # 1759无效字段错误消息已更新,以显示原始方法的来源和位置。 新消息为:

    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现在提供了 has_many 关系的 setter 和 getter,用于设立其子项。 (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 现在提供了一个 rake任务,用于在 Mongoid 管理索引定义且删除应自动执行的环境中强制删除索引。 (汉斯·哈塞尔伯格)

    rake db:force_remove_indexes
    rake db:mongoid:force_remove_indexes
    
  • # 1726 Mongoid.load!现在接受要加载的环境的可选第二个参数。 这优先于已设立的任何环境变量(如有)。

    Mongoid.load!("/path/to/mongoid.yml", :development)
    
  • # 1724 Mongoid 现在支持正则表达式字段。

    class Rule
      include Mongoid::Document
      field :pattern, type: Regexp, default: /[^abc]/
    end
    
  • # 1714 /# 1706添加了对索引创建的更好日志记录。 (汉斯·哈塞尔伯格)

    当根document model上存在索引时:

    Creating indexes on: Model for: name, dob.
    

    在嵌入式模型上定义索引时:

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

    如果未定义索引,则不会记录任何内容,如果定义了错误的索引,则会引发错误。

  • #1710 如果您不希望 Mongoid 自动保护ID和类型属性,可以设立一个配置选项来将其关闭。

    Mongoid.protect_sensitive_fields = false
    
  • # 1685属于关系现在具有 build_ 和 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由于 Mongoid 无法确定而在没有正确 inverse_of 定义的情况下尝试为关系设立子关系时,会引发Mongoid::Errors::InverseNotFound错误。

    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多态关系现在在查找查询中使用*_type键。

    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现在支持同一父类的父可分离多态关系。 这仅在从父端设立以便知道子级属于哪个关系时才有效。 (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.
    
  • # 现在可以将响应to_criteria的1650对象合并到现有条件对象中。

    class Filter
      def to_criteria
        # return a Criteria object.
      end
    end
    
    criteria = Person.where(title: "Sir")
    criteria.merge(filter)
    
  • # 1635所有异常现在都提供更全面的错误,包括发生的问题、发生问题原因的详细摘要以及可能的解决方案。 示例:

    (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.
    
  • # 添加了1616 Model.find_by ,它接受要在数据库中搜索的参数哈希值。 如果没有返回单个文档,则会引发 DocumentNotFound 错误。 (Piotr Jakubowski)

    Band.find_by(name: "Depeche Mode")
    
  • # 1606 Mongoid 现在在关系中添加accepts_nested_attributes_for 时会像 Active Record 一样启用自动保存。

    class Band
      include Mongoid::Document
      has_many :albums
      accepts_nested_attributes_for :albums # This enables the autosave.
    end
    
  • #1477 Mongoid 现在会自动保护ID和类型属性免遭批量赋值。 您可以通过将其重新定义为可访问来覆盖此设置(不建议)。

    class Band
      include Mongoid::Document
      attr_accessible :id, :_id, :_type
    end
    
  • # 1459现在可以通过将选项传递给工作单元来为特定代码执行禁用身份映射。

    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关联现在可以在单个文档持久性操作中提供安全选项。

    band.albums.with(safe: true).push(album)
    band.albums.with(safe: true).create(name: "Smiths")
    
    album.with(safe: true).create_producer(name: "Flood")
    
  • # 1348现在,多对多关系支持预先加载。

  • # 1292删除属性现在会在保存文档时取消设置该属性,而不是设置为零。

    band = Band.find(id)
    band.remove_attribute(:label) # Uses $unset when the document is saved.
    
  • # 1291 Mongoid数据库会话现在延迟连接,并且是完全线程安全的。 如果创建了新线程,则会为其创建新的数据库会话。

  • # 1291 Mongoid 现在支持 mongoid.yml 中定义的任意数量的数据库连接。 示例,您可以在同一应用程序环境中拥有本地单服务器数据库、多可用区副本集和分分片集群。 Mongoid 可以在任何时间点连接到任何会话。

  • # 1291 Mongoid 现在允许您使用with在每次查询或持久化操作的基础上在运行时持久化到您喜欢的任何数据库或集合。

    Band.with(collection: "artists").create(name: "Depeche Mode")
    band.with(database: "secondary).save!
    Band.with(collection: "artists").where(name: "Depeche Mode")
    
  • # 1291现在,您可以使用改进的新store_in宏基于每个模型配置其文档的存储位置。

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

    当然,这可以在运行时通过with方法覆盖。

  • # 现在可以从具有持久性的关系中弹出1212嵌入式文档。

    band.albums.pop # Pop 1 document and persist the removal.
    band.albums.pop(3) # Pop 3 documents and persist the removal.
    
  • # 1188关系现在具有存在谓词,用于简化检查关系是否为空的操作。 (安迪·莫里斯)

    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?
    
  • # 1188 1 - 1关系现在有一个 :autobuild 选项,用于指示在访问权限当前不存在该关系的情况时是否应使用空属性自动构建该关系。 适用于 embeds_one、embedded_in、has_one、belongs_to。 (安迪·莫里斯)

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

    使用存在性检查时,不会执行自动构建。

    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 为多态 belongs_to 提供 index: true 时,Mongoid 将ID和类型作为复合索引进行索引。

    class Comment
      include Mongoid::Document
    
      # Indexes commentable_id and commentable_type as a compound index.
      belongs_to :commentable, polymorphic: true, index: true
    end
    
  • # 尝试设立未定义的字段并允许动态字段为 false 时, 1053引发Mongoid::Errors::UnknownAttribute而不是不提供任何方法。 (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字段现在可标记为只读,这样,仅当文档为新时才允许设立其值。

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

    尝试在持久化文档上设立只读值时,这些值将被忽略,但 update_attribute 和 remove_attribute 除外,在这些情况下会引发错误。

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

主要更改(向后不兼容)

  • 多态关系不能有对象ID 以外的 ID。 这是因为 Mongoid 无法以优化的方式正确确定关系另一端的各个类将其 id存储在何处,因为它们可能都不同。

这在以前是不允许的,但没有明确说明。

  • # 2039验证关系的存在现在会检查关系和外键值。

  • 索引语法已更改。 第一个参数现在是名称/方向对的哈希值,可选的第二个哈希参数用于其他选项。

    带选项的普通索引,方向为1或 - 1 :

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

    地理空间索引需要“ 2 d”作为其方向。

    class Venue
      include Mongoid::Document
      field :location, type: Array
    
      index location: "2d"
    end
    
  • 自定义可序列化字段已修改。 您的对象不应再包含Mongoid::Fields::Serializable ,而只需实现3方法: #mongoize.demongoize.evolve

    #mongoize 是一种实例方法,可将对象转换为 mongo 友好的值。

    .demongoize 是一个类方法,可以从mongo获取一些数据并实例化自定义类型的对象。

    .evolve 是一种类方法,可以接受任何对象,并将其转换为在Mongoid::Criteria中使用。

    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 不再是具有无关访问权限的哈希。

  • after_initialize 如果设立了该选项,回调将不再级联到子级。

  • #1865 count 在内存和mongo上下文中的行为现在与Ruby在可枚举对象上的 count 完全相同,并且可以接受对象或区块。 这针对mongo上下文进行了优化,除了传递区块之外,不会将所有内容都加载到内存中。

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

    请注意,尽管内存上下文和mongo上下文的签名相同,但建议您仅对内存上下文使用区块语法,因为嵌入式文档已加载到内存中。

    另请注意,不再支持通过传递布尔值来考虑跳过和限制,因为这不一定是一个有用的功能。

  • autocreate_indexes配置选项已删除。

  • Model.defaults 不再存在。 您可以使用Model.pre_processed_defaultsModel.post_processed_defaults的组合来获取所有默认值。

    Band.pre_processed_defaults
    Band.post_processed_defaults
    
  • Model.identityModel.key已被删除。 对于自定义 ID,用户现在必须覆盖_id字段。

    当默认值为过程时,将在设立所有其他属性应用默认值。

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

    要在其他属性之前应用默认,请将:pre_processed设立为 true。

    class Band
      include Mongoid::Document
      field :_id,
        type: String,
        pre_processed: true,
        default: ->{ BSON::ObjectId.new.to_s }
    end
    
  • 各种语言的自定义应用程序异常以及Mongoid.add_language功能已被删除。

  • Mongoid 不再支持1.8 。 仅支持1.9模式下的 MRI 1.9.3及更高版本或 JRuby 1.6及更高版本。

  • # 1734当通过Model.find使用多个 id 搜索文档时,如果未找到所有id,Mongoid 将引发错误,并告诉您丢失的 id。 以前,只有在没有返回任何内容的情况下才会引发错误。

  • # 1675现在,对关系添加存在验证可启用自动保存。 这是为了确保当新的父对象与新的子对象一起保存并标记为有效时,两者都会持久保存以确保数据库中的状态正确。

  • # 1491确保空转换在访问权限时返回空哈希。

  • # 1484 Model#has_attribute?现在的行为与 Active Record 相同。

  • # 1471 Mongoid 不再剥夺时间的任何精度级别。

  • # 1475现在,如果已定义,则在时间序列化中默认使用活跃支持的时区域。

  • # 1342 Model.findmodel.relation.find现在只接受一个或多个 ID。 带有条件哈希的第一个/最后一个/所有已被删除。

  • # 1291 mongoid.yml 已被彻底修改,升级现有应用程序会出现一些可爱的 Mongoid 特定配置错误。 您可以通过现有的 rake任务重新生成新的 mongoid.yml ,该任务具有高度注释,以帮助您完成所有配置的可能性。

  • # 1291 persist_in_safe_mode配置选项已删除。 您现在必须在 mongoid.yml 中告知数据库会话默认是否应在安全模式下持久化。

    production:
      sessions:
        default:
          database: my_app_prod
          hosts:
            - db.app.com:27018
            - db.app.com:27019
          options:
            consistency: :eventual
            safe: true
    
  • # 1291 safelyunsafely已被删除。 现在,请使用with在运行时提供安全模式选项。

    Band.with(safe: true).create
    band.with(safe: { w: 3 }).save!
    Band.with(safe: false).create!
    
  • # 1270关系宏已更改,以匹配其 AR 对应项:现在仅存在 :has_one、:has_many、:has_and_belongs_to_many 和 :belongs_to。

  • # 1268 Model#new?已被删除,开发者现在必须始终使用Model#new_record?

  • # 1182在为关系设置外键字段的值后,不再需要重新加载来刷新关系。 请注意,其行为与 Active Record 完全相同。

    如果已设立ID ,但其文档尚未持久化,则访问该关系将返回空结果。

    如果已设立ID且其文档已保留,则访问该关系将返回文档。

    如果设立了ID ,但此后未保存基础文档,则重新加载会将文档返回到其原始状态。

  • # 已更改数组、哈希、整数和布尔值的1093字段序列化策略,使其更加一致,并在适当的情况下匹配 AR。

    数组的序列化调用Array.wrap(object)哈希的序列化调用Hash[object] (对象上的 to_hash) 整数的序列化始终通过to_i返回 int 布尔值的序列化默认为 false 而不是 nil。

  • # 在 $size 的条件中, 933的:field.size已重命名为:field.count ,以免与符号的大小方法冲突。

  • # 829 /# 797 Mongoid 作用域代码已完全重写,现在与 Active Record API匹配。 由于这一向后不兼容的更改,某些方法已被删除或重命名。

    Criteria#as_conditions 和 Criteria#fuse 不再存在。

    Criteria#merge 现在只接受另一个响应to_criteria的对象。

    Criteria#merge!现在会合并到另一个对象中,而不会创建新的条件对象。

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

    命名作用域和默认作用域不再将哈希值作为参数。 从现在开始,仅接受条件和过程包装条件,如果参数不正确,则会引发错误。

    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
    

    “named_scope”宏已删除,从现在开始仅使用“scope”。

    Model.unscoped 现在接受一个区块,该区块不允许将默认作用域应用于该区块内的任何调用。

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

    Model.scoped 现在采用直接在条件选项哈希上设立的选项。

    Band.scoped(skip: 10, limit: 20)
    
  • # 463 Document#upsert不再是Document#save的别名,现在在调用时实际上会执行正确的MongoDB 更新或插入(upsert)命令。 如果您以前使用过此方法并希望获得相同的行为,请切换为save

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

已解决的问题

  • # 2166 Criteria#from_map_or_db在预先加载时去除类型选择,因为它会在之后检查类型是否正确。

  • # 2129修复了嵌入多个关系上所有字段的排序。

  • # 2124修复偏执文档的默认范围和已删除范围。

  • # 2122允许嵌入式文档对布尔字段进行排序。

  • # 2119允许Criteria#update_all接受原子操作和普通集。

  • # 2118在DateTime -> Time转换期间不要去掉任何精度。

  • # 2117确保嵌入一个关系在使用嵌套属性时运行回调。

  • # 2110 Model#touch现在可以正常处理嵌入式文档。

  • # 2100允许原子操作在设立了 Deleted_at 的偏执文档上正确执行。

  • # 2089允许根据外键将 mongoization 和 Evolution 正确分离。

  • #2088 如果 ID 存储为对象ID,则允许从身份映射中提取string ID 进行查找。

  • # 2085允许将浮点数和整数去鬼化为大数十进制数。

  • # 2084如果元数据不存在,则不进行级联。

  • # 2078调用Model#cloneModel#dup现在可以正确将属性设置为脏。

  • # 2070允许为也具有 created_at 的新文档手动覆盖 updated_at。

  • # 2041在急切加载返回零个文档后,不要对关系访问权限多次访问数据库。

  • # 1997级联回调应该能够在终止时停止回调链。

  • # 1972 addedloadedunloaded现在可以是属于1 -n 关系的文档上的有效作用域名称。

  • 现在,传递空大量时,嵌入式文档上的 # 1952 /# 1950 #all_in行为可以正确匹配根文档。 (汉斯·哈塞尔伯格)

  • 如果将未找到引发错误设立为 false,则 # 1941 /# 1939 Model.find_by现在返回 nil。 (汉斯·哈塞尔伯格)

  • # 1859 /# 1860 Model#remove_attribute现在可以在嵌入式文档上正确取消设置。 (安东·奥尼先科)

  • # 1852确保级联回调不会无限递归。 (阿拉·霍华德)

  • # 1823 Relation#includes?现在可以在启用身份映射的情况下正常运行。

  • # 仅当哈希和大量字段被访问时, 1810 Model#changed?不再返回 true。

  • # 1876 /# 1782允许在嵌入的许多条件查询中使用点表示法。 (Cyril Mougel)

  • # 1745修复批处理清除,使其在属性设置中正常运行。

  • # 1718确保关系中 #first/#last 的一致性- 它们现在始终匹配数据库中的第一个/最后一个,但会选择首先在内存中匹配。

  • # 1692 /# 1376 Model#updateattributesModel#update_attributes!现在接受赋值选项。 (汉斯·哈塞尔伯格)

  • # 1688 /# 1207为命名空间内的关系宏提供类名时不要求命名命名空间。 (汉斯·哈塞尔伯格)

  • # 1665 /# 1672在嵌套条件选择器中展开复杂条件,例如 #matches。 (汉斯·哈塞尔伯格)

  • #1335 如果已有针对条件的排序选项,请勿将ID排序条件添加到第一个/最后一个。

  • # 1321引用的许多可枚举目标现在都有哈希支持,可以更有效地防止重复。

  • # 1135 DateTimes 现在可以在反序列化时正确获取时区。

  • # 1031 Mongoid 现在会尽可能将数组字段中的值序列化为适合 Mongo 的值。

  • # 685现在,尝试对嵌入式文档使用版本控制会引发适当的错误,提醒开发者这是不允许的。

2.6.0

新增功能

  • # 2709从 Mongoid 3向后移植了touch功能。

2.5.2

已解决的问题

  • # 2502修复了缓存键,以便在文档不包含Mongoid::Timestamps::Updated时正确处理。 (亚瑟·诺盖拉·内维斯)

2.5.1

已解决的问题

  • # 从2492 3.0.0 -stable 开始向后移植级联回调性能和内存修复。

  • # 2464向后移植嵌套属性修复,以便在更新属性时在内存中保留许多关系。 (克里斯·汤普森)

2.5.0

新增功能

  • 此版本支持 1.7.0 及更高版本的mongo和BSON gem,并解决了保留 2.4.x 的问题 系列锁定低于1.6.2

2.4.12

已解决的问题

  • # 2178确保在替换嵌入单关系帖子运行销毁回调。

  • # 2169在回调中保存后,当文档被销毁时,允许保存通过。

  • # 2144对偏执文档的唯一性验证现在可以正确确定范围。

  • # 2127在删除嵌套属性时不要解除嵌入式文档父文档的绑定。

2.4.11

已解决的问题

  • 此版本强制将 mongo 驱动程序版本的上限限制为1.6.2 由于Mongo::Connection.from_uri API 发生更改,不再支持有效的连接选项。

  • # 2040修复了区域设置存在验证的错误插值问题。

  • # 2038如果在两侧都有定义,则允许仅由外键确定反向关系,而不仅仅是 inverse_of 声明。

  • # 2023允许对与核心Ruby方法冲突的动态类型进行序列化,但仍对其进行序列化。

  • # 2008如果内存中的关系为空,则存在性验证应访问数据库以检查有效性。

  • # 2006允许在执行 #only 调用帖子仅排除_id字段。

2.4.10

已解决的问题

  • # 2003当嵌入式文档在数据库中作为 nil 存储时,文档生成不会失败。

  • #1997 当 before_destroy回调返回 false 时,不要通过嵌套属性删除偏执的嵌入式Docs 。

  • # 1994 dependent: :delete现在仅针对一对多和多对多关系访问数据库一次,而不是针对每个文档访问一次。

  • # 1987在工作单元内两次预先加载文档时,不要将文档双重插入到身份映射中。

  • # 1953唯一性验证现在适用于本地化字段。

  • # 1936当在父文档的更新调用中不使用嵌套属性或文档本身时,允许以原子方式设置 n 级深度的嵌入式文档,而不会发生模式冲突。

  • # 1957 /# 1954确保数据库名称设立为具有继承性。 (汉斯·哈塞尔伯格)

2.4.9

已解决的问题

  • # 1943确保数值验证适用于大十进制数。

  • # 1938长度验证现在可用于本地化字段。

  • # 1936现在可以正确处理推送与其他推送的冲突。

  • # 1933 Proxy#extend应委托给目标,现在,扩展代理本身是通过Proxy#proxy_extend来处理的。

  • # 1930确保复杂条件在所有 where 子句中得到扩展。 (汉斯·哈塞尔伯格)

  • #1928 通过嵌套属性删除嵌入式文档现在会执行具有ID匹配条件的 $pull,而不是 $pullAll,以涵盖所有情况。 在这种情况下,无法删除之前为已持久化的文档新添加的默认值,因为该文档与数据库中的内容不匹配。

  • # 1924 /# 1917修复推送到嵌入式关系的问题,其中默认作用域未确定新文档的作用域。 (汉斯·哈塞尔伯格)

  • # 1922 /# 1919删除集合会取消记忆内部包装的集合,以确保在定义固定大小集合时始终将它们重新创建为固定大小集合。 (汉斯·哈塞尔伯格)

  • # 1916 /# 1913唯一性验证不再受默认范围的影响。 (汉斯·哈塞尔伯格)

  • # 1943确保数值验证适用于大十进制数。

2.4.8

已解决的问题

  • # 1892当出现非主操作错误时,Mongoid 应在重试操作之前重新连接。

  • # 1887不要将回调级联到未定义回调的子项。

  • # 1882不要将重复的 ID 条件扩展为具有重复选择的 $and。

  • # 1878修复了默认应用程序值,使其在迭代时不应用某些onlywithout选择,而不仅仅是firstlast

  • # 1874修复了拒绝所有空白过程常量,以使用销毁非空白值正确处理值。 (Stefan Daschek)

  • # 1869 /# 1868延迟原子集现在使用原子路径而不是元数据名称来修复多级嵌入问题。 (Chris Micacchi 提供了规格)

  • # 1866应在关系中对子项进行绑定后应用帖子处理默认值 (procs)。构建。

2.4.7

已解决的问题

  • 确保重新加载嵌入式文档时保留对父文档的引用。

  • # 1837始终将符号选项传递给驾驶员。

  • # 1836确保关系计数选取未保留外键链接的持久文档。

  • # 1820销毁 embeds_many 中的嵌入式文档还会从根本的_uncoped 目标中删除该文档并为该关系重新创建索引。

  • # 1814不要在 after_initialize 上级联回调。

  • #1800 对mongo连接无效的选项现在已被过滤掉。

  • # 1785大小写相等已修复,可正确处理实例检查。

2.4.6

已解决的问题

  • # 1772允许 skip 和 limit 将字符串转换为整数。 (让·布西埃)

  • # 1767 Model#update_attributes 再次接受批量分配选项。 (汉斯·哈塞尔伯格)

  • # 1762 Criteria#any_of 现在可以正确处理本地化字段。

  • # 1758元数据现在会返回外部库支持选项的自身。

  • # 1757确保序列化将所有属性类型转换为字段定义的类型。

  • #1756 可序列化哈希选项应传递给嵌入式Docs 。

2.4.5

已解决的问题

  • # 1751 Mongoid 的记录器现在可响应Ruby日志记录API兼容性级别。

  • # 1744 /# 1750现在可以使用条件API对嵌入式文档中的本地化字段进行排序。 (汉斯·哈塞尔伯格)

  • # 1746存在性验证现在会显示哪些区域设置对于本地化字段为空。 (Cyril Mougel)

  • # 1727允许嵌入条件中的点表示法同时适用于嵌入一个和嵌入多个。 (莱尔·安德伍德饰演)

  • # 1723初始化回调应级联通过子级,而无需确定子级是否已更改。

  • # 1715可序列化哈希现在在每次保存或保存帖子包含嵌入式文档时是一致的。

  • # 1713修复将类与子类的实例进行比较时的 === 检查。

  • # 1495回调在失败的1.8.7上不再出现“在方法之外调用超级方法”错误 红宝石。

2.4.4

已解决的问题

  • # 1705允许更改多对多外键的顺序。

  • # 1703 Updated at 现在再次进行版本控制。 (卢卡斯·苏扎)

  • # 1686在取消绑定时设置基本元数据,并为属于关系进行绑定。

  • # 1681如果子目录的命名空间不存在,则尝试为没有命名空间的模型创建索引。

  • # 1676允许将预先加载作为默认作用域。

  • # 1665 /# 1672在嵌套条件选择器中展开复杂条件,例如 #matches。 (汉斯·哈塞尔伯格)

  • # 1668在调用警告之前确保 Mongoid 记录器存在。 (Rémy Coutable)

  • # 1661确保唯一性验证适用于克隆的文档。

  • # 1659重置同一嵌入关系时,清除延迟原子集。

  • # 1656 /# 1657如果范围和属性均未更改,则不要访问数据库进行唯一性验证。 (priyaaank)

  • # 1205 /# 1642当通过Criteria#onlyCriteria#without限制从数据库返回的字段,然后保存文档时。 默认值不再覆盖已排除的字段。

2.4.3

已解决的问题

  • # 1647 DateTime 序列化已采用 UTC 格式时,不会转换为本地时间。

  • # 1641 /# 1639 Mongoid.observer.disable :all 现在的行为与 AR 相同。

  • # 1640更新使用者应与其持久保存的集合的名称相关联,而不是与类的名称相关联。

  • # 1637 /# 1636作用域在子类化时不再修改父类作用域。 (汉斯·哈塞尔伯格)

  • # 1629嵌入式多个关系上的 $all 和 $in 条件现在可以正确处理正则表达式搜索和不同长度的元素。 (Douwe Maan)

  • # 1623 /# 1634默认作用域不再破坏 Mongoid::Versioning。 (汉斯·哈塞尔伯格)

  • # 1605修复救援响应的回归,Rails 3.2

2.4.2

已解决的问题

  • 使用 include_type_for_serialization,#1628_type字段可以再次作为全局选项包含在JSON或 xml 的序列化中。 (Roman Shterenzon)

  • # 1627验证格式现在可以正常使用本地化字段。 (Douwe Maan)

  • # 1617关系代理方法现在会显示在 Mongoid 的禁止字段列表中。

  • # 1615允许对所有规范运行使用托管和端口的单一配置,并通过设置 MONGOID_SPEC_HOST 和 MONGOID_SPEC_PORT 环境变量进行覆盖。

  • # 1610当对偏执文档进行版本控制并设立了最大版本时,从嵌入式关系中硬删除旧版本。

  • # 1609允许在游标迭代以及所有其他操作期间重试连接。

  • # 1608在嵌套属性中传递 id 且文档不存在时,防止出现无方法错误。

  • # 1605删除有关救援响应的弃用警告,Rails 3.2

  • # 1602在类型转换时保留 $and 和 $or 查询的结构。

  • # 1600提供关系时,唯一性验证不再出错。

  • # 1599确保在执行 #each 时,可枚举目标首先让出内存中的内容,而不是总是首先卸载的内容。

  • # 1597修复更改能力相同元素的大量字段顺序的功能。

  • # 1590当字段嵌套在大量内时,允许对条件中的布尔值进行正确序列化。

2.4.1

已解决的问题

  • # 1593针对原始版本进行修改时,嵌入式文档上的数组现在可正确进行原子更新。

  • # 1592不要在 create_indexes rake任务中接受索引生成中的异常。

  • # 1589当没有文档加载到内存中时,允许将空大量分配给 HABTM。

  • # 1587当大量字段的先前值为显式 nil 时,现在可以使用新值自动重置。

  • # 当允许动态字段时, 1585 Model#respond_to?现在会为 setter 返回 true。

  • # 1582允许在数组中设立nil 值。

  • # 1580允许在保存后将数组设立为 nil,而不仅仅是空。

  • # 1579不要对条件中单独设立的字段元素调用 #to_a。

  • # 1576如果要验证的字段没有更改,则不要在唯一性验证时访问数据库。

  • # 1571别名字段获取原始名称和别名的所有脏属性方法以及所有 getter 和 setter。 (汉斯·哈塞尔伯格)

  • # 1568在未配置环境时回退到开发环境并发出警告。

  • # 1565对于具有非标准Ruby或数据库名称的字段和外键,使用define_method 而不是 class_eval 来创建访问器和脏方法。

  • # 1557内部策略类不再与模型冲突。

  • # 1551如果只有子(嵌入式)文档发生更改,则父文档现在会为Model#changed?返回true

  • # 1547当 new 等待帖子回调时,重置来自父项的持久保存子项,从而镜像更新功能。

  • # 1536如果指定了包含项,现在会对条件调用firstlast时发生预先加载。

2.4.0

新增功能

  • 现在可以将范围传递给 #where 条件,以在幕后创建 $gte/$lte查询。 Person.where(dob: start_date...end_date)

  • 自定义可序列化字段现在可以覆盖 #selection,为条件查询提供自定义序列化。

  • # 1544内部人员现在尽可能使用Array.wrap而不是to_a

  • # 1511存在性验证现在支持本地化字段。 (蒂亚戈·拉斐尔·戈迪尼奥)

  • # 1506 Model.set现在接受 false 和 nil 值。 (Marten Veldthuis)

  • # 1505 Model.delete_all/destroy_all现在可以采用 :conditions 哈希,也可以直接采用属性。

  • # 1504 Model.recursively_embeds_many现在接受 :cascade_callbacks 选项。 (帕维尔·普拉沃苏德)

  • # 对于由其他应用程序另存为字符串的符号字段, 1496 Mongoid 现在会将字符串转换回符号。

  • # 1454 , # 900关联现在有一个after_build回调,该回调在调用.buildbuild_方法后执行。 (杰弗里·琼斯、瑞安·汤森)

  • # 1451范围现在可以是任何范围值,而不仅仅是数字。 (aupajo)

  • # 排序时现在使用1448本地化。 (汉斯·哈塞尔伯格)

  • # 如果未找到环境, 1422 Mongoid 会在 yaml 加载时引发错误。 (汤姆·斯图尔特)

  • # 1413 $not支持添加到条件符号方法中。 (马克·韦尔)

  • # 1403添加了配置选项scope_overwrite_exception ,默认值为 false,因为在定义与现有方法同名的命名作用域时会引发错误。 (Christoph Grabo)

  • # 1388 model.add_to_set现在支持添加多个值,并在幕后使用 $each 执行 $addToSet。 (克里斯蒂安·费尔德)

  • # 1387添加了Model#cache_key ,用于 Rails 缓存。 (Seivan Heidari)

  • #1380 调用 Model.find( ID ) 现在将根据_id字段的类型正确地与任何类型进行相互转换。

  • # 1363为本地化字段添加了回退和默认支持,并能力了一次性获取和设立所有翻译的功能。

  • # 1362别名字段现在可以在条件中正确进行类型转换。

  • # 1337数组字段,包括 HABTM,许多外键现在具有更智能的脏检查,如果大量已更改,则不再执行简单的 $ 设立 。 如果仅向大量中添加了项目,则执行 $pushAll。 如果仅删除了项目,则会执行 $pullAll。 如果同时进行了添加和删除操作,则会执行 $ 设立以避免 mods 冲突。

已解决的问题

  • 对 Rubinius 上的冻结文档调用Document#as_document会返回属性,而不是 nil。

  • # 1554将默认值的应用程序拆分为过程/非过程,其中非过程在实例化期间立即执行,而过程在设立所有其他值后执行。

  • # 1553在大量中添加和删除值的组合使用针对大量当前内容的 $设立,而不是针对新值的 $。

  • # 1546脏更改应在具有无关访问权限的哈希中返回。

  • # 1542现在,预先加载会考虑在获取关联时为条件提供的选项(即跳过、限制)。

  • # 1530如果大量是外键字段,则不要通过脏跟踪将添加的值复制到数组。

  • # 1529在关系关联上调用unscoped现在可以正常运行。

  • # 1524允许通过预先设置外键默认值来访问权限覆盖的字段赋值器中的关系。

  • # 1523允许通过disable禁用观察器。 (乔纳斯·施耐德)

  • # 1522修复了 Rails 3.2的创建索引 rake 任务。 (格雷·曼利)

  • # 1517修复 Mongoid 文档,使其与 RSpec 的存根模型正确配合使用。 (蒂亚戈·拉斐尔·戈迪尼奥)

  • # 1516不要在绑定时复制关系型文档。

  • #默认, 1515 Mongoid 不再尝试根据复杂条件序列化自定义字段。

  • #1503 Has 很多关系替换现在可以处理任何类型的现有 Docs 和新Docs的混合。

  • # 如果子文档为偏执,则遵循嵌入式文档上的1502嵌套属性。

  • # 1497使用所提供的唯一性验证失败的消息。 (贾斯汀·埃瑟里奇)

  • # 1491如果本地化字段没有设立默认,则返回 nil。 (蒂亚戈·拉斐尔·戈迪尼奥)

  • # 1483发送模块包含在运行时向父文档添加新字段以及向子类添加字段的操作。

  • # 1482应用新的排序选项不会合并到之前链接的条件中。 (Gerad Suyderhoud)

  • # 1481修复在设立默认值之前访问多对多关系时的无效查询。

  • # 1480 Mongoid 的内部序列化字段类型已重命名为“内部”,以免与自定义可序列化类型中的 Ruby 核心类发生冲突。

  • # 1479使用 create 或 create! 时,不要在多对多上重复 id

  • # 1469当extract_id 返回 nil 时,通过条件选择器从身份映射中获取文档。

  • # 1467现在,定义名为元数据的字段可以正确引发无效字段错误。

  • # 1463批量插入使用者现在将范围限定为集合,以避免在回调到错误位置时将文档持久保存到其他集合。

  • # 1462通过嵌套属性进行赋值有许多关系*_attributes=不会自动保存关系。

  • # 1461修复了复杂条件中外键字段的序列化问题,以免转义整个哈希值。

  • # 1458版本控制不再跳过已防止批量分配的字段。

  • # 1455 、# 1456现在,对任何文档调用销毁会暂时将其标记为销毁标记,直到操作完成。 (纳德·阿克努克)

  • # 当文档被销毁时, 1453 Model#to_key应返回一个值。

  • # 1449一个副作用是,替换新文档时不再持久化。 (jasonsydes)

  • # 1439已嵌入? 当关系定义为循环时,应返回 true。

  • # 1433嵌入式和关系1 - 1的多态嵌套属性现在可以正确更新。

  • # 现在可以克隆 # 1426冻结文档。 (aagrawal 2001 )

  • # 1382通过 rake任务创建索引时,如果索引定义不正确,则引发适当的错误。 (马修·拉沃)

  • # 1381 、# 1371身份映射现在可正确处理继承的文档。 (保罗·卡纳维斯)

  • # 1370将嵌入式数组上的 concat 拆分为自己的方法,以处理由于回调后运行执行问题处理导致的批处理。

  • # 1366数组和哈希值现在会进行深度复制,以进行脏跟踪。

  • # 1359通过使用 lambda 表达式,能力不将默认作用域应用于所有命名作用域。

  • # 1333修复了命名空间中存在的自定义类型的错误。 (彼得·古梅森)

  • # 1259默认值如果与数据库状态不同,则被视为脏数据。

  • # 1255确保嵌入式文档遵循定义的默认范围。

2.3.4

  • # 1445防止关系关联的目标可枚举值的已加载大量中出现重复文档。

  • # 1442现在,当对 has one 关系使用 create_ 方法时,替换现有文档时会调用相应的破坏性方法。

  • # 1431 Enumerable 上下文应在生成帖子添加到加载的大量中,以便像 #any?基于区块值的短路不会错误地具有额外的文档。

  • # 从数据库加载用于修订的1418文档不再放置在身份映射中。

  • #1399 允许在外键中将字符串转换为整数,其中ID定义为整数。

  • # 1397如果排序条件已存在,则不要首先添加默认排序条件。

  • # 1394修复是否存在?当计数大于1时起作用。 (尼克·霍夫曼)

  • # 1392在字段不存在的聚合函数上返回0 。

  • # 1391唯一性验证现在可以在使用主键定义的嵌入式文档上正常运行。

  • # 1390当 _type字段为小写时,在常量化之前类进行驼峰化。

  • # 1383修复子类化可序列化字段的读取时强制转换问题。

  • # 1357多个深度嵌入式文档上 update_attributes 的延迟原子集现在可以正确保留。

  • # 1326确保 HABTM 上的基础文档在保存构建的子文档后保存其密钥。

  • # 1301如果已设立,请勿覆盖嵌入关系上的基本元数据。

  • # 嵌入式文档再次允许带有反向 nil 的1221 HABTM。

  • # 1208从 embedded_in 设置时,不要通过 setter 自动保留子文档。

  • # 791根文档仅在嵌入式文档发生更改时更新其时间戳。

2.3.3

已解决的问题

  • #1386 将mongo / BSON依赖降低为 1.3

  • # 1377修复聚合函数以正确处理nil 或未定义值。 (马克西姆·加西亚)

  • # 1373如果一个范围覆盖另一个范围,则发出警告。

  • # 1372在用于验证的读取属性内部进行绑定时,切勿持久化。

  • #1364 修复了重新加载具有非BSON对象ID的文档的问题。

  • # 1360通过挂接到 Active Support 的加载钩子(类似于 AR)来修复 Mongoid 观察者实例化的性能。

  • # 1358修复当 inverse_of设立为 nil 时多对多同步的类型错误。

  • # 1356 $in 条件现在可以链接到同一键上的非复杂条件,而不会出错。

  • #1350 、#1351 stringdouble修复了对键进行参数化时出现的 引号和波浪号 转换错误。

  • # 1349 Mongoid 文档在包含 Enumerable 时不应崩溃。 (乔纳斯·尼克拉斯)

2.3.2

已解决的问题

  • # 1347当提供的哈希值没有修饰符作为键时,修复嵌入式匹配器。

  • # 1346在某个条件上调用 first/last 时重复默认排序条件。

  • # 1343如果不向Criteria#all_of传递任何参数,则返回所有文档。 (克里斯·利什曼)

  • # 1339通过嵌套属性进行删除时,确保对可级联子项运行销毁回调。

  • # 1324在引用同一类的多对多上设置inverse_of: nil会为反向外键返回 nil。

  • # 1323允许字符串和符号作为嵌套属性的属性大量中的 ID。 (迈克尔·伍德)

  • # 1312现在,在配置上设置记录器会接受任何类似于记录器的内容。

  • # 1297如果基数是新的,则访问关系时不要访问数据库。

  • # 1239允许在创建区块中附加引用关系,设置默认设立。

  • # 1236确保所有模型都在 rake 任务中加载,因此即使在线程安全模式,也可以创建所有索引。

  • # 736对嵌入式文档调用 #reload 现在可以正常运行。

2.3.1

已解决的问题

  • # 1338在作用域或关系上调用 #find 会检查身份映射中的文档实际上是否与其他作用域参数匹配。

  • # 1321 HABTM 不再允许重复条目或密钥,而是像以前一样允许不一致。

  • # 1320修复了性能基准测试中的错误。

  • # 1316添加了单独的 Rake任务“db:mongoid:drop”,以便 Mongoid 和 AR 可以共存。 (丹尼尔·瓦尔塔诺夫)

  • # 1311修复从哈希继承自定义字段序列化的问题。

  • # 1310启用身份映射后,引用的许多可枚举目标不再重复加载和添加的文档。

  • # 1295修复了多个包含仅执行第一个包含的加载的问题。

  • # 1287修复了版本控制的最大版本限制。

  • # 1277 attribute_will_change! 即使没有发生更改,也会正确标记该属性。

  • # 1063偏执文档在软销毁时正确运行销毁回调。

  • # 当时间序列化失败时, 1061引发Mongoid::Errors::InvalidTime

  • #1002 尝试转换时检查合法的BSON ID。

  • # 920允许将关系命名为目标。

  • #905 如果string是使用前缀 :: 定义的,则返回元数据中的规范化类名称。

  • # 不再需要861 accepts_nested_attributes_for 来直接通过哈希或哈希大量设立嵌入式文档。

  • # 857修复基础文档处于偏执状态时的依赖关系级联。

  • # 768修复了模块范围内的 class_attribute 定义。

  • # 现在可以通过Mongoid::Paranoia软删除408嵌入式文档。

2.3.0

新增功能

  • Mongoid 现在支持基本的本地化字段,并将它们存储为区域设置=> 值对的哈希值。 field :name, localize: true

  • # 1275对于将安全模式默认为 true 的应用程序,您现在可以通过 #unsafely 指示单个操作在没有安全模式的情况下持续存在: person.unsafely.save , Person.unsafely.create 。 (马特·桑德斯)

  • # 1256 Mongoid 现在可以为 Rails 引擎中的模型创建索引。 (Caio 菲律宾语)

  • # 1228允许通过将区块传递给 #key 来预格式化复合键。 (本·亨德利)

  • # 现在支持1222范围内的批量分配。 (安德鲁·谢杜罗夫)

  • # 现在可以通过使用 #timeless 在每次调用的基础上关闭 # 1196时间戳: person.timeless.save , Person.timeless.create(:title => "Sir")

  • # 1103允许开发者创建自己的自定义复杂条件。 (Ryan Ong)

  • Mongoid 现在会在serializable_hashto_json结果中包含所有定义的字段,即使这些字段没有值,以使 ActiveResource 客户端更容易使用序列化文档。

  • 现在以以下形式提供对 MongoDB 的 $and操作符的支持: Criteria#all_of(*args) ,其中 args 是多个哈希表达式。

  • # 1250 、# 1058嵌入式文档现在可以通过在关系上设置:cascade_callbacks => true来在父保存时触发回调。 (pyromanic、Paul Rosania、Jak Charlton)

主要变更

  • Mongoid 现在依赖于活动模型3.1及更高版本。

  • Mongoid 现在依赖于mongo Ruby驱动程序 1.4 及更高版本。

  • Mongoid 需要 MongoDB 2.0.0及更高版本。

已解决的问题

  • # 1308修复了 HABTM 查找的范围。

  • # 1300命名空间模型应正确处理递归嵌入。

  • # 1299当未在所有关系上定义 inverse_of 时,具有版本控制功能的自引用文档不再失败。

  • # 1296将内部构建方法重命名为 _Building。

  • # 1288 、 # 1289 _id和 updated_at 不应成为版本化属性的一部分。

  • # 1273 Mongoid.preload_models 现在会检查是否设立了预加载配置选项,其中 Mongoid.load_models 始终加载所有内容。 (瑞安·麦克基里)

  • # 1244现在是否有一个关系遵守默认的依赖行为。

  • # 1225修复通过 $ 设立延迟持久化嵌入式文档的问题。

  • # 1166如果未定义环境变量,请勿在 Railtie 中加载配置。 (特伦斯·李)

  • # 1052 alias_attribute现在可再次按预期运行。

  • # 939通过 #becomes 向上转换时应用默认属性。 (克里斯托斯·帕帕斯)

  • # 932修复带有前导零的整数字段的转换。

  • # 948如果版本存在,则在克隆时重置版本号。

  • # 763链接命名作用域时不要合并 $in 条件数组。

  • # 730在原始模型持久化帖子添加了关系的现有模型现在可以在不进行迁移的情况下添加新关系。

  • # 726具有复合键的嵌入式文档无法正确验证唯一性。

  • # 582循环非嵌入式关系现在可以正确验证唯一性。

  • # 484验证所有类型的多个作用域的唯一性现在可以正常运行。

  • 删除使用Mongoid::Versioning创建的版本不再触发关系上的依赖级联。

2.2.5

  • 这是一个小补丁版本,用于解决2.2 .x 资产编译期间出现 Heroku 错误。

2.2.4

  • # 1377修复聚合函数以正确处理nil 或未定义值。 (马克西姆·加西亚)

  • # 1373如果一个范围覆盖另一个范围,则发出警告。

  • # 1372在用于验证的读取属性内部进行绑定时,切勿持久化。

  • # 1358修复当 inverse_of设立为 nil 时多对多同步的类型错误。

  • # 1356 $in 条件现在可以链接到同一键上的非复杂条件,而不会出错。

  • #1350 、#1351 stringdouble修复了参数化键时 引号和波浪号 转换中的错误。

  • # 1349 Mongoid 文档在包含 Enumerable 时不应崩溃。 (乔纳斯·尼克拉斯)

2.2.3

  • # 1295修复了多个包含仅执行第一个包含的加载的问题。

  • # 1225修复通过 $ 设立延迟持久化嵌入式文档的问题。

  • #1002 修复BSON对象ID转换,以首先检查是否合法。

2.2.2

  • 此版本删除了 mongo Ruby 驱动程序对1.3 .x 的依赖限制。 用户现在可以使用1.3 .x 到1.4 .x。

2.2.1

已解决的问题

  • # 1210 、# 517允许嵌入式文档关系查询使用点表示法。 (斯科特·埃拉德)

  • #1198 如果加载的文档中没有Docs ,则 Enumerable 目标应使用条件计数。

  • # 1164消除剩余的 no method in_memory 错误。

  • # 1070允许自定义字段序列化器拥有自己的构造函数。

  • #1176 允许在 after_destroy 回调中从嵌入式Docs访问权限父文档。

  • # 如果字段不存在或有值, 1191上下文群组方法(最小值、最大值、总和)不再返回 NaN,而是返回 nil。

  • # 1193 , # 1271对于带有 的整数字段,始终返回整数。 000 精度,而不是浮点数。

  • # 1199修复了多次读取时哈希和大量字段访问权限的性能问题。

  • # 1218修复了具有整数外键的关系引用模型的问题。

  • # 1219修复了在单次调用中推送和拉取同一嵌入式文档时出现的各种修改冲突问题。

  • # 1220元数据在绑定时不应被 nil 覆盖。

  • # 1231将 Mongoid 的原子设立类重命名为 Sets,以避免在文档包含后与 Ruby 的原生Set 发生冲突。

  • # 1232修复级联时在 before_destroy 回调期间对相关模型的访问权限。

  • # 1234修复销毁文档时的 HABTM 外键同步问题。

  • # 1243在查询 ID 是否定义为字符串时,多态关系不会转换为对象ID。

  • #1247 强制 Model.first 按ID升序排序,以保证第一个文档。

  • # 1248已添加 #unscoped 以嵌入许多关系。

  • # 1249嵌套属性中的销毁标志现在实际上会销毁 has_many 的文档,而不仅仅是破坏关系。

  • # 1272创建副本集连接时不要就地修改配置选项。

2.2.0

新增功能

  • Mongoid 现在包含Criteria#includes(*args)形式的预先加载。 这适用于 has_one、has_many、belongs_to 关联,并且需要启用身份映射才能运行。 在identity_map_enabled: true 中设置mongoid.yml 。例如: Person.where(title: "Sir").includes(:posts, :game)

  • 关系现在可以将模块作为:extend选项的值。 (Roman Shterenzon)

  • 可以通过将选项传递给#store_in宏来创建固定大小集合: Person.store_in :people, capped: true, max: 1000000

  • Mongoid::Collection 现在支持 collection.find_and_modify

  • Document#has_attribute? 现在别名为 Document#attribute_present?

  • # 930您现在可以通过 mongoid.yml 关闭 Mongoid 记录器,方法是执行以下操作 logger: false

  • # 909现在,如果使用 bang 方法持久化并且回调返回 false,而不是之前的无信息验证错误,则会引发Mongoid::Errors::Callback异常。

主要变更

  • # 1173 has_many 关系不再删除关系设立(= [ doc_one, doc_two ]) 上的所有文档,而是查看依赖选项来确定应发生什么行为。 : 删除和 :destroy 的行为与以前一样,:nullify 和不指定选项都会使旧文档无效而不删除。

  • # 1142 、# 767通过父属性设立访问时,嵌入式关系不再立即以原子方式持久存在。 这包括嵌套属性设置以及attributes=write_attributes 。 然后,子文档更改将保持脏状态,并在对子文档或父文档调用 save 时自动更新。

已解决的问题

  • # 1190修复了由于将 README 和变更日志更改为降价而导致的 gemspec 错误。

  • # 1180 、 # 1084 、 # 955 Mongoid 现在会在尝试根据条件转换为对象ID 时检查字段类型,而不是名称中是否包含/id/

  • # 1176可枚举目标应始终先返回内存中的文档,当调用 #first

  • # 1175确保多对多关系的双方在创建过程中保持同步。

  • # 1172引用的可枚举关系现在可以正确处理#to_json (Daniel Doubrovkine)

  • # 1040删除对 self.class 的所有委托调用,提高类加载时间的性能。

2.1.9

已解决的问题

  • # 1159修复构建块,使其在嵌套时不会相互抵消。

  • # 1154不要删除空大量设立上的多对多文档。

  • # 1153在 after 回调中保留父文档引用。

  • # 1151修复自引用文档上的关联验证无限循环。

  • #默认,与belongs_to关联的1150验证为false

  • # 1149修复了belongs_to关系上的元数据设置。

  • #1145 nil如果inverse_of 设立为nil , 元数据反向应返回 。

  • # 1139可枚举目标现在像数组一样发出嘎嘎声。

  • # 1136将belongs_to父项设置为nil不会再删除父项。

  • # 1120如果关系未响应,请勿对其调用in_memory

  • # 1075将默认过程中的self设置为文档实例。

  • # 1072为嵌套文档写入属性可以采用哈希值或哈希大量。

  • # 990嵌入式文档可以使用具有多个父定义的单个embedded_in

2.1.8

已解决的问题

  • # 1148修复了所有关系上的respond_to? ,以便正确返回。

  • # 1146定义字段时重新添加了 Mongoid 破坏性字段检查。

  • # 1141修复了条件中nil值的转换。

  • # 1131已正确验证 Mongoid/Kaminari 分页功能。

  • # 1105修复原子更新使用者,将其范围限定为类。

  • 默认lambda 表达式和过程中的 # 1075 self现在引用文档实例。

  • # 740已删除embedded_object_id配置参数。

  • # 661修复嵌入式文档上的元数据缓存。

  • # 595修复了关系重新加载标记。

  • # 410现在,可按预期将文档从一种关系移动到另一种关系。

2.1.7

这是用于修复 MRI 1.8.7的特定版本 2.1.6引入的损坏。

2.1.6

已解决的问题

  • # 1126修复与其他关系代理的关系设置。

  • # 1122哈希和大量字段现在可以在访问权限和更改时正确标记为脏。

  • # 656修复了因取消设置已加载关联而导致重新加载中断关系的问题。

  • # 647在删除值时,优先使用#unset#remove_attribute

  • # 290验证推送到深层嵌入的文档。

2.1.5

已解决的问题

  • # 1116嵌入式子项在销毁回调中保留对父项的引用。

  • # 1110 、# 1115不要记忆文档中与元数据相关的助手。

  • # 1112 db:create_indexes不再多次索引子类。

  • # 1111 、# 1098不要在$set操作中设立_id

  • # 1007更新属性正确跟踪大量更改。

2.1.4

这是一个获取 Psych 生成的 gemspec 的特定发布,因此使用新 YAML 解析器的 Ruby 上不会再出现解析错误。

2.1.3

已解决的问题

  • # 1109修复验证未将一对一加载到内存中的问题。

  • # 1107 Mongoid 不再需要mongoid/railtie application.rb

  • # 1102修复嵌套属性删除。

  • # 1097 Reload 现在运行after_initialize回调。

  • # 1079嵌入许多不再重复的文档。

  • # 1078修复了嵌入式文档上的大量条件匹配问题。

  • # 1028在一对多和多对多关系上实施作用域。

  • # 988多对多清除不再删除子文档。

  • # 977自动保存关系也可通过嵌套属性发挥作用。

  • # 972递归嵌入现在可以处理生成名称的命名空间。

  • # 943不要覆盖Document#attributes

  • # 893验证计数未缓存多对多关系。

  • # 815验证after_initialize是否在正确位置运行。

  • # 793验证any_of作用域与任何其他作用域是否正确链接。

  • # 776修复了处理子类时的 mongoid 大小写质量。

  • #747 修复了使用键呈现string值的复杂条件。

  • # 721 #safely现在可以在发生验证错误时正确引发验证错误。

2.1.2

已解决的问题

  • # 将条件的1082别名为sizelengthcount 。 (亚当·格林)

  • # 1044为同一类定义多个关系时,如果未定义inverse_of ,则始终先返回默认的反向关系。

  • # 710嵌套属性接受哈希或数组中的id_id

  • # 1047忽略传递给embeds_man推送和替换的nil值。 (德里克·贝利)

2.1.1

已解决的问题

  • #1021, #719 推送新文档时,多对多关系不会trigger额外的数据库查询。

  • # 607对大型关联调用create不会加载整个关系。

  • # 1064 Mongoid::Paranoia应遵循unscopedscoped

  • # 1026 model#update_attribute现在可以将布尔值更新为false

  • # 618 Crack XML 库通过向String类添加#attributes方法来破坏 Mongoid。 (史蒂芬·麦金蒂)

2.1.0

主要变更

  • Mongoid 现在需要 MongoDB 1.8 .x 才能正确支持#bit#rename原子操作。

  • 传统的从节点支持已从 Mongoid 中删除。 应使用副本集代替传统的主从设置。

  • 自定义字段序列化已更改。 请参阅可序列化以了解更改。

  • 脏属性跟踪已切换为使用 ActiveModel,这带来了许多错误修复和更改:

  • # 756 After 回调和观察者会在 previous_changes 中看到已更改的内容,而不是刚刚所做的更改

  • # 434文档现在会在全新或实例化状态与数据库状态不同时被标记为脏文档。 这与 ActiveRecord一致。

  • # 323 Mongoid 现在支持 [字段]_will_change!来自 ActiveModel::Dirty

  • 开发模式的 Mongoid 模型预加载现在默认为false

  • :autosave => true 在关系关联上,现在可以在更新和创建时保存。

  • Mongoid 现在有一个用于简单find_by_id查询的身份映射。 请参阅网站以获取文档。

新增功能

  • # 1067字段现在接受:versioned属性,以便能够禁用使用Mongoid::Versioning对哪些字段进行版本控制。 (吉姆·本顿)

  • # 587为多关联和多对多关联添加了顺序偏好。 (格雷戈里·曼)

  • 添加了链接order_by语句的能力。 (格雷戈里·曼)

  • # 961允许任意Mongo::Connection选项传递Mongoid::Config::Database对象。 (Morgan Nelson)

  • 为多对多引用启用autosave 。 (戴夫·克鲁宾斯基)

  • 已添加以下显式原子操作: Model#bitModel#popModel#pullModel#push_allModel#renameModel#unset

  • 添加了印地语的例外翻译。 (苏克尔蒂·阿迪加)

已解决的问题

  • # 974修复attribute_present? ,使其在属性值为false时正常工作,这要感谢 @nickhoffman。 (格雷戈里·曼)

  • # 960 createindexes rake任务无法识别很多 mongoid 模型,因为它在从文件名猜测模型名称时出现问题。 (Tobias Schlottke)

  • # 874从 MM 引用中删除是单方面的。 (nickhoffman、davekrupinski)

  • 替换 Rails 3.1 + 中删除的已弃用的class_inheritable_hash 。 (康斯坦丁·沙巴诺夫)

  • 修复替换整个多对多关系时的不一致状态。

  • 添加子类字段继承时,不要破坏可继承的属性。 (戴夫·克鲁宾斯基)

  • # 914使用$or选择器查询嵌入式文档。 (马克斯·戈洛夫尼亚)

  • # 514修复具有关系扩展的文档的封送处理。 (克里斯·格里戈)

  • Metadata#extension 现在,当定义扩展时,会返回Module ,而不是Proc

  • # 837当allow_dynamic_fields设立为false并加载具有无法识别字段的嵌入式文档时,会引发异常。

  • # 963通过哈希回归初始化嵌入式文档大量(Chris Griego、Morgan Nelson)

  • Mongoid::Config.reset 将选项重置为其默认值。

  • Mongoid::Fields.defaults 已记忆,以便更快地实例化模型。