gpt4 book ai didi

ruby-on-rails - 关于从 MongoMapper 迁移到 Mongoid 的建议?

转载 作者:行者123 更新时间:2023-12-01 22:41:07 25 4
gpt4 key购买 nike

从性能和开发事件来看,Mongoid 现在似乎是 Mongo 的卓越 ORM。不幸的是,我们使用的是 MongoMapper,需要迁移。

有什么我们应该注意的问题或绊脚石吗?我们在 Google 上发现了一些过时的文章,并尝试在 Mongoid Google 群组上发帖(尽管我们被禁止),但希望得到过去这样做过的 SO 成员的想法。

我们使用 Rails 3.2.12。

谢谢!

最佳答案

它们都是很棒的 Ruby MongoDB 库。但如果您想切换,请注意以下几点:

将 MongoMapper ORM 迁移到 Mongoid ORM - 注释

  • 配置数据库连接。

  • 替换配置yaml文件(包括副本配置)。

  • 配置 Mongoid 特定选项。例如 - raise_not_found_error: false 。如果您不希望每次查询不返回任何内容时都会出现错误...

  • 更改所有模型定义 - include MongoMapper::Documentinclude 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模型中的函数来创建您想要的 JSON 结构。

  • MM,Model.fields(:id, :name) ,将从数据库返回的字段限制为提供给该方法的字段。在 Mongoid 中是 Model.only(:name,:id)

  • 一些查询发生变化:

    1. 通过数组选择对象:MM: Model.where(:attr.in => [ ] )Model.where(:attr => [ ] ) 。 Mongoid 只是:Model.where(:attr.in => [ ] )

    2. MM的 map 选项相当于Mid的勇气。 Model.map(&:name) --到-- Model.pluck(:name)

    3. Mongoid 不支持 nil 的查找查询。例如:value = nil. Model.find(value)会抛出错误:"Calling Document .find with nil is invalid" 。所以在 mongoid 中我们应该这样做:Model.find(value || "") .

    4. MM:Model.find_or_initialize_by_name("BOB") 。在 Mongoid Model.find_or_initialize_by(name: "BOB") .

    5. MM 可以在这两个选项中使用:Model.where({:name => 'BOB'}).first ,还有Model.first({:name => 'BOB'}) 。 Mongoid 只有第一个选择。

    6. 在 MM 中,要更新多个对象:Model.set({conditions},attr_to_update) 。在 Mongoid 中:Model.where(conditions).update_all(attr_to_update) .

关于ruby-on-rails - 关于从 MongoMapper 迁移到 Mongoid 的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com