从性能和开发活动来看,Mongoid 现在似乎是 Mongo 的卓越 ORM。不幸的是,我们使用的是 MongoMapper 并且需要迁移。
有什么我们应该注意的问题或绊脚石吗?我们在 Google 上发现了一些过时的文章,并尝试在 Mongoid Google Groups 上发帖(尽管我们被禁止),但希望得到过去这样做过的 SO 成员的想法。
我们使用的是 Rails 3.2.12。
Thanks!
它们都是很棒的 Ruby MongoDB 库。但如果您想切换,请注意以下几点:
将 MongoMapper ORM 迁移到 Mongoid ORM - 注释
配置数据库连接。
替换配置 yaml 文件(包括副本配置)。
配置 Mongoid 特定选项。例如-raise_not_found_error: false
。如果您不希望每次查询不返回任何内容时都会出现错误......
更改所有模型定义 -include MongoMapper::Document
to include Mongoid::Document
更改所有字段定义的格式。
在 mongoid 中,您应该指定时间戳:include Mongoid::Timestamps
更改验证。例如::in => ARRAY
, 将:validates :name, presence: true, inclusion: { in: ARRAY }
更改索引。
更改 order_by 格式。例如: MM:Model.all(:order => 'name')
。蒙古人:Model.order_by('name ASC')
Error
是 Mongoid 中的关键字。所以如果你有一个名为Error
,你应该改变它。
分页格式不同,使用另一个 gem。
MM中的主键索引条目是id
。在 Mongoid 中是_id
,如果您有其他代码依赖.id
在对象 JSON 中,您可以覆盖as_json http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json模型中的函数来创建您想要的 JSON 结构。
In MM, Model.fields(:id, :name)
,将从数据库返回的字段限制为提供给该方法的字段。在 Mongoid 中是Model.only(:name,:id)
-
一些查询发生变化:
按数组选择对象:MM:Model.where(:attr.in => [ ] )
and Model.where(:attr => [ ] )
。 Mongoid 只是:Model.where(:attr.in => [ ] )
MM的地图选项就相当于Mid的勇气。Model.map(&:name)
--to-- Model.pluck(:name)
Mongoid 不支持 nil 的查找查询。例如:value = nil. Model.find(value)
会抛出错误:"Calling Document .find with nil is invalid"
。所以在 monoid 中我们应该这样做:Model.find(value || "")
.
In MM: Model.find_or_initialize_by_name("BOB")
。在蒙古人中Model.find_or_initialize_by(name: "BOB")
.
MM 可以用于这两个选项:Model.where({:name => 'BOB'}).first
,并且Model.first({:name => 'BOB'})
。 Mongoid 只有第一个选择。
在MM中,要更新多个对象:Model.set({conditions},attr_to_update)
。在蒙古人中:Model.where(conditions).update_all(attr_to_update)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)