- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从性能和开发事件来看,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::Document
至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模型中的函数来创建您想要的 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的 map 选项相当于Mid的勇气。 Model.map(&:name)
--到-- Model.pluck(:name)
Mongoid 不支持 nil 的查找查询。例如:value = nil. Model.find(value)
会抛出错误:"Calling Document .find with nil is invalid"
。所以在 mongoid 中我们应该这样做:Model.find(value || "")
.
MM:Model.find_or_initialize_by_name("BOB")
。在 Mongoid 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)
。在 Mongoid 中:Model.where(conditions).update_all(attr_to_update)
.
关于ruby-on-rails - 关于从 MongoMapper 迁移到 Mongoid 的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849152/
我不得不跟踪脏东西。它适用于 parent 博士。但是当我更改嵌入或引用的文档时,脏 必须通过文档本身的嵌入/引用来访问。 如何跟踪父文档本身的脏? 最佳答案 我已经整理了 mongoid 扩展来解决
给定一个带有如下扩展的简单嵌入关系: class D include Mongoid::Document embeds_many :es do def m #...
因此,似乎没有任何干净的方法可以通用地允许具有强参数的 Hash 字段。这当然可能是一个强大的参数问题,但我很好奇是否有解决方法。我有一个包含一些字段的模型... field :name, type:
当我尝试查询 Mongoid 条件的结果并仅保留字段不同的文档时,我感到非常沮丧。这样做: Books.all.distinct(:name) ..只返回名称字段,而不是文档。 还使用 uniq此处另
Mongoid 提供了一些 rake 任务,其中之一为数据库中的所有集合创建索引: 耙数据库:创建索引 但是如果我错了请纠正我,创建索引与实际索引所有项目不是不同吗?我怎样才能重新索引我的文档?如果我
我有一个订阅者类,它有 embeds_many 订阅。订阅具有属性状态。我想添加对状态的验证,以便每个订阅者只有一个订阅可以具有“事件”状态。订户可以拥有多个状态为“已购买”或“已过期”的订阅。 最佳
Mongoid 提供方法 create 和 create!比如 Artist.create(name: "Pablo Picasso") 或 Artist.create!(name: "Pablo P
在 Mongoid 2.x 中,可以执行 Mongoid.database.connection.close 来重置数据库连接。这个特定的 API 在 Mongoid3 中不再可用,重置连接的新方法是
我有一个名为“艺术家”的集合,我想将其重命名为“artist_lookups”。我该怎么做? 最佳答案 使用 mongoid5/mongo ruby 驱动程序 2: # if you need t
目前我为我的类(class)设置了 default_scope,但我希望 rails_admin 使用 .unscoped 执行列表查询 有什么办法可以做到这一点吗?我没有看到覆盖 rails_adm
我知道可以通过数据库调用找到它,但出于好奇,例如在 Node 中,如果我有一个 Mongoose 文档 ID 数组。我如何针对该数组模拟 indexOf 函数以确定其中是否有另一个 mongoId?
Mongoid 没有超时选项。 http://mongoid.org/en/mongoid/docs/installation.html 我希望 Mongoid 终止长时间查询。如何设置 Mongoi
我似乎无法在这里或通过Google找到答案,任何帮助都很棒。 建筑物可以正确保存,但是嵌入式文档PriorityArea不会更新... 我想最终让它均匀地为新的优先级区域添加一个新表格,但是需要首先对
根据 github 上 mongoid 的自述文件,我可以做一些奇特的查询,比如Person.select(:first_name, :last_name).where(:title => "Sir"
有谁知道如何索引和搜索embedded documents与 sunpot_mongoid ? 问题已在 sunspot_mongoid issues 中提出,但至今无解。 最佳答案 刚试过。这是一个
我有一个来自 Devise 的模型用户具有这种关系: 用户名 # Relationships references_many :houses, :dependent => :delete 现在我有一
我在控制台上执行此查询,但是我不能简单地复制并粘贴它以在 mongo shell 中执行它。 有什么方法可以将mongoid DSL转换成真正的mongo查询语句。 谢谢 database=test
在文档中它说你可以使用 inverse_of: nil 但并没有真正描述用例: http://mongoid.org/en/mongoid/docs/relations.html#has_and_be
我正在将 mongoid-history gem 添加到我的项目中。 根据指南in github ,当我将 Userstamp 添加到我的跟踪器时,它会创建 created_by 字段,并使用名为 c
Mongoid.master.collection("seq").find_and_modify({ :query => {:_id => self.class.name}, :up
我是一名优秀的程序员,十分优秀!