有关从MongoMapper迁移到Mongoid的建议?
看起来Mongoid现在是基于性能和开发活动的Mongo的优秀ORM。 不幸的是,我们使用MongoMapper并需要迁移。
我们应该注意哪些问题或绊脚石? 我们在Google上发现了一些过时的文章,并尝试在Mongoid Google网上论坛上发帖(虽然我们被禁止),但是会喜欢过去做过这些的SO成员的想法。
我们在Rails 3.2.12上。
谢谢!
它们都是Ruby的MongoDB Libraries。 但是如果你想切换,这里有一些注意事项:
将MongoMapper ORM迁移到Mongoid ORM – Notes
-
配置数据库连接。
-
替换配置yaml文件(包括副本配置)。
-
配置Mongoid特定选项。 例如 –
raise_not_found_error: false
。 如果你不想每次查询什么都不返回错误… -
更改所有模型定义 –
include MongoMapper::Document
以include Mongoid::Document
-
更改所有字段定义的格式。
-
在mongoid中,你应该指定时间戳:
include Mongoid::Timestamps
-
更改validation。 例如::
:in => ARRAY
,将是:validates :name, presence: true, inclusion: { in: ARRAY }
-
改变指数。
-
按格式更改order_by。 例如:MM:
Model.all(:order => 'name')
。 Mongoid:Model.order_by('name ASC')
-
Error
是Mongoid中的关键字。 因此,如果您有一个名为Error
的模型,则应更改它。 -
分页格式不同,使用另一个gem。
-
MM中的主键索引条目是
id
。 在Mongoid中它是_id
,如果你在对象JSON中依赖.id
其他代码,你可以覆盖模型中的as_json函数来创建你想要的JSON结构。 -
在MM,
Model.fields(:id, :name)
,将从数据库返回的字段限制为提供给方法的字段。 在Mongoid中它是Model.only(:name,:id)
-
一些查询更改:
-
按数组选择对象:MM:
Model.where(:attr.in => [ ] )
和Model.where(:attr => [ ] )
。 Mongoid只有:Model.where(:attr.in => [ ] )
-
MM的地图选项相当于Mid的选择。
Model.map(&:name)
to–Model.pluck(:name)
-
Mongoid不支持查找nil的查询。 例如:
value = nil. Model.find(value)
value = nil. Model.find(value)
将抛出一个错误:"Calling Document .find with nil is invalid"
。 所以在mongoid中我们应该这样做:Model.find(value || "")
。 -
在MM中:
Model.find_or_initialize_by_name("BOB")
。 在MongoidModel.find_or_initialize_by(name: "BOB")
。 -
MM可以用在这两个选项中:
Model.where({:name => 'BOB'}).first
,还有Model.first({:name => 'BOB'})
。 Mongoid只有第一选择。 -
在MM中,更新多个对象:
Model.set({conditions},attr_to_update)
。 在Mongoid:Model.where(conditions).update_all(attr_to_update)
。
-