Docs 菜单

将 Mongoid 添加到现有应用程序

在本指南中,您可以学习;了解如何将 Mongoid 添加到现有的 Sinatra 或Ruby on Rails (Rails)应用程序。 要学习;了解如何设立使用 Mongoid 的新应用程序,请参阅以下指南之一:

要在现有 Sinatra应用程序中开始使用 Mongoid,请执行以下步骤:

  1. mongoid 依赖项添加到应用程序的 Gemfile 中。

  2. 创建config/mongoid.yml 配置文件并指定连接目标,如快速入门指南的配置MongoDB连接步骤所示。

  3. 创建应用程序文件并加载配置文件,如快速入门指南的“查看MongoDB数据”步骤所示。

  4. 创建 Mongoid 模型以与数据交互。

您可以将 Mongoid 添加到现有 Rails应用程序,与其他 Active Record 适配器一起运行。 要使用适配器组合,可以添加 mongoid 依赖项并使用连接信息填充配置文件,以开始在应用程序中使用MongoDB 。

要调整现有 Rails应用程序以仅使用 Mongoid 而不是 Active Record,您必须进行其他配置更改,如以下部分所述。

mongoid gem 添加到应用程序的 Gemfile

Gemfile
gem 'mongoid'

要将 Mongoid 作为唯一的数据库适配器,删除或注释掉 中列出的任何RDBMS库,例如Gemfile sqlitepg

然后,通过运行以下命令来安装依赖项:

bundle install

通过运行以下命令生成默认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文件所示:

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 一起使用。

config/application.rb 和应用程序的其他配置文件中,删除或注释掉对 config.active_recordconfig.active_storage 的任何引用。

要从使用 Active Record迁移到 Mongoid,您必须调整应用程序的现有模型。

Active Record 模型派生自 ApplicationRecord 类,没有列定义,而 Mongoid 模型通常没有超类,但必须包含 Mongoid::Document 属性。

创建 Mongoid 模型时,可以通过以下方式定义字段:

  • 显式定义字段

  • 使用动态字段

示例,基本的 Active Record Post 模型可能如下所示:

app/models/post.rb
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
end

类似的 Mongoid Post 模型可能如下所示:

app/models/post.rb
class Post
include Mongoid::Document
field :title, type: String
field :body, type: String
has_many :comments, dependent: :destroy
end

您可以使用动态字段定义 Post 模型,而不是使用预定义字段,如以下代码所示:

app/models/post.rb
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 的更多信息:

创建使用 Mongoid 的 Rails API应用程序的进程与创建普通应用程序几乎相同。 唯一的区别是,您必须在运行rails new 时添加 --api 标志以创建应用程序。 将 Rails API应用程序迁移到 Mongoid 遵循与前面部分所述相同的进程。