将 Mongoid 添加到现有应用程序
Overview
在本指南中,您可以学习;了解如何将 Mongoid 添加到现有的 Sinatra 或Ruby on Rails (Rails)应用程序。 要学习;了解如何设立使用 Mongoid 的新应用程序,请参阅以下指南之一:
Sinatra 应用程序
要在现有 Sinatra应用程序中开始使用 Mongoid,请执行以下步骤:
将
mongoid
依赖项添加到应用程序的Gemfile
中。创建
config/mongoid.yml
配置文件并指定连接目标,如快速入门指南的配置MongoDB连接步骤所示。创建 Mongoid 模型以与数据交互。
Rails 应用程序
您可以将 Mongoid 添加到现有 Rails应用程序,与其他 Active Record 适配器一起运行。 要使用适配器组合,可以添加 mongoid
依赖项并使用连接信息填充配置文件,以开始在应用程序中使用MongoDB 。
要调整现有 Rails应用程序以仅使用 Mongoid 而不是 Active Record,您必须进行其他配置更改,如以下部分所述。
修改依赖项
将 mongoid
gem 添加到应用程序的 Gemfile
:
gem 'mongoid'
要将 Mongoid 作为唯一的数据库适配器,删除或注释掉 中列出的任何RDBMS库,例如Gemfile
sqlite
或pg
。
然后,通过运行以下命令来安装依赖项:
bundle install
Mongoid 配置
通过运行以下命令生成默认Mongoid 配置:
bin/rails g mongoid:config
此生成器创建用于配置与MongoDB 部署连接的 config/mongoid.yml
配置文件,以及可用于设立其他选项的 config/initializers/mongoid.rb
初始化程序文件。
在 config/mongoid.yml
文件中,指定连接字符串和其他连接选项。
修改框架
打开 config/application.rb
文件并检查内容。 如果文件使用 require "rails/all"
声明加载所有 Rails 组件,删除此声明。 您必须为每个 Rails 组件添加单独的 require
声明,如以下示例config/application.rb
文件所示:
# Remove or comment out rails/all #require "rails/all" # Add the following instead of rails/all: require "rails" # Comment out unneeded frameworks # require "active_record/railtie" rescue LoadError # require "active_storage/engine" rescue LoadError require "action_controller/railtie" rescue LoadError require "action_view/railtie" rescue LoadError require "action_mailer/railtie" rescue LoadError require "active_job/railtie" rescue LoadError require "action_cable/engine" rescue LoadError # require "action_mailbox/engine" rescue LoadError # require "action_text/engine" rescue LoadError require "rails/test_unit/railtie" rescue LoadError
注意
由于依赖 Active Record, ActionText 、ActiveStorage 和 ActionMailbox 适配器无法与 Mongoid 一起使用。
禁用 Active Record 适配器
在 config/application.rb
和应用程序的其他配置文件中,删除或注释掉对 config.active_record
和 config.active_storage
的任何引用。
调整模型
要从使用 Active Record迁移到 Mongoid,您必须调整应用程序的现有模型。
Active Record 模型派生自 ApplicationRecord
类,没有列定义,而 Mongoid 模型通常没有超类,但必须包含 Mongoid::Document
属性。
创建 Mongoid 模型时,可以通过以下方式定义字段:
示例,基本的 Active Record Post
模型可能如下所示:
class Post < ApplicationRecord has_many :comments, dependent: :destroy end
类似的 Mongoid Post
模型可能如下所示:
class Post include Mongoid::Document field :title, type: String field :body, type: String has_many :comments, dependent: :destroy end
您可以使用动态字段定义 Post
模型,而不是使用预定义字段,如以下代码所示:
class Post include Mongoid::Document include Mongoid::Attributes::Dynamic has_many :comments, dependent: :destroy end
数据迁移
如果您想将关系数据库中已有的数据迁移到MongoDB,则必须执行数据迁移。 您不必执行模式迁移,因为MongoDB不需要使用预定义的模式来存储数据。
迁移工具通常特定于数据集。 尽管 Mongoid 支持 Active Record 关联超集,但使用 Mongoid 与 Active Record 时,模型引用在集合中的存储方式有所不同。
请访问以下资源,学习;了解有关从RDBMS迁移到MongoDB 的更多信息:
Rails API
创建使用 Mongoid 的 Rails API应用程序的进程与创建普通应用程序几乎相同。 唯一的区别是,您必须在运行rails
new
时添加 --api
标志以创建应用程序。 将 Rails API应用程序迁移到 Mongoid 遵循与前面部分所述相同的进程。