关于从 MongoMapper 迁移到 Mongoid 的建议?

2024-04-10

从性能和开发活动来看,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)

  • 一些查询发生变化:

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

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

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

    4. In MM: Model.find_or_initialize_by_name("BOB")。在蒙古人中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)。在蒙古人中:Model.where(conditions).update_all(attr_to_update).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于从 MongoMapper 迁移到 Mongoid 的建议? 的相关文章

随机推荐

  • 在C#中打印数组的所有内容

    我试图在调用一些改变数组的方法后打印出数组的内容 在Java中我使用 System out print Arrays toString alg id 我如何在 C 中做到这一点 你可以试试这个 foreach var item in you
  • 使用路由器传递数据

    我在将数据传递给其他组件时遇到问题 这是一个例子 onEdit data this router navigate edit state data relativeTo this activatedRoute 还有我的路由器ts file
  • 在 Woocommerce 中的 WYSIWYG 编辑器字段中添加或替换变体字段

    我正在尝试弄清楚如何将 Woocommerce 变体订阅产品文本字段转换为所见即所得编辑器 How it looks now 正如您所看到的 我将代码放入该字段以更新其外观 但这对于不懂代码的客户来说不起作用 如何向该字段添加文本编辑器 函
  • 握手过程中收到close_notify

    我已在所有 18 台服务器上配置了 SSL HTTPS 所有 18 台服务器均使用 SSL 相互通信 一切都工作正常 突然我得到了这个错误 握手期间收到close notify 日志 2011 06 03 03 36 17 372 Log
  • 使用react-router-dom(v6)成功登录后Reactjs重定向到仪表板页面

    我正在使用 redux toolkit 制作简单的 Reactjs 登录表单 我想重定向到dashboard登录成功后的页面 它抛出以下错误 我是 ReactJS 的新手 如果我错过了什么 请告诉我 Error Uncaught in pr
  • 如何修复 Cocoapods 安装设置错误?

    我正在尝试在我的 mac 上安装 cocoapods 但无法安装 它显示以下错误 sudo gem update system Latest version currently installed Aborting sudo gem ins
  • 是否有任何库可以将 SQL 查询表示为 Java 代码中的对象? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何库可以用来将 SQL 查询表示为 Java 中的对象 在代码中 我有大量 java l
  • 删除所有表的django命令是什么?

    是否有 django 命令 A 删除所有表 B 删除所有表中的所有数据 C 创建模型中定义的所有表 我现在找不到这些 我所说的命令是指那些小事情 比如 runserver etc A 删除所有表 manage py sqlclear将打印删
  • UISearchBar 与 InputView

    我正在为我的应用程序制作自定义键盘 它与 UITextField 配合得很好 但 UISearchBar 不支持 inputView UIView inputView if self keyboard nil self keyboard M
  • 在 Django Web 应用程序中处理计算密集型任务

    我有一个桌面应用程序 正在将其移植到 Django Web 应用程序 该应用程序有一些计算量相当大的部分 使用 numpy scipy 和 pandas 等库 显然 将计算密集型代码导入到 Web 应用程序中并运行它并不是一个好主意 因为这
  • OpenNLP 训练中的“截止”和“迭代”是什么意思?

    是什么意思cut off and iteration用于 OpenNLP 培训 或者自然语言处理 我只需要对这些术语进行外行解释 据我认为 迭代是算法重复的次数 截止是一个值 如果文本的值高于某个特定类别的截止值 它将映射到该类别 我对吗
  • 使用填充重新定位 ListView 的滚动条

    我有一个ListView右侧 和左侧 有填充 目前该列表看起来像这样 ROW ROW ROW ROW 最右边的线是屏幕的边缘 s 是滚动条 其右侧的空白区域是ListView向右填充 I 是让滚动条位于填充的右侧 如下所示 ROW
  • Excel 何时以及如何重新计算其公式?

    据我了解 Excel 可以设置为手动或自动重新计算公式 但在阅读了互联网上的一些信息后 我开始对 Excel 自动重新计算公式时的作用感到困惑 我之前假设 Excel 仅在公式引用的单元格发生更改或公式包含易失性数据 例如TODAY 功能
  • flutter TabBarView 不会被 TabController 改变

    我正在尝试以编程方式在应用程序内的选项卡之间进行更改 tabController animateTo 只改变TabBar 但不改变TabBarView 这是我的示例 每当我向右滑动时 它都应该 animateTo LEFT 因为选项卡更改侦
  • 仅当同一列的组中存在另一个值时 dplyr 才对值进行过滤

    我完全预料到会因为重复的问题而受到批评 但我就是找不到类似的问题 提前致歉 我正在尝试清理一些数据 这些数据有时包含摘要行 有时不包含 这是一个可重复的小例子 library tidyverse yr lt c 2010 2010 2010
  • 为什么 row-cols-n 不适用于任何大于 6 的值?

    据我所知 row cols 类不适用于大于 6 的任何内容 即 row cols 6 有效 但 row cols 7 无效 这意味着像 div class row row cols md 6 row cols lg 8 对于大于 md 断点
  • Django / GeoDjango 在 Ubuntu / Dokku 上找不到 GDAL 库

    我们收到 django core exceptions ImproperlyConfigured 找不到 GDAL 库 GeoDjango的常见安装问题 https docs djangoproject com en 3 2 ref con
  • 字符串接受接口应该是什么样子?

    这是后续的这个问题 https stackoverflow com questions 4640281 design of stdifstream class 假设我编写一个接受或返回 const 字符串的 C 接口 我可以使用 const
  • 在没有虚方法或超类的类中,假设 (第一个成员变量的地址) == this 是否安全?

    我创建了一个私有 API 它假设类中第一个成员对象的地址与类的 this 指针相同 这样成员对象就可以轻松派生出一个指向它所属对象的指针 的成员 而无需显式存储指针 鉴于我愿意确保容器类不会从任何超类继承 不会有任何虚拟方法 并且执行此技巧
  • 关于从 MongoMapper 迁移到 Mongoid 的建议?

    从性能和开发活动来看 Mongoid 现在似乎是 Mongo 的卓越 ORM 不幸的是 我们使用的是 MongoMapper 并且需要迁移 有什么我们应该注意的问题或绊脚石吗 我们在 Google 上发现了一些过时的文章 并尝试在 Mong