在 Rails 里使用 MongoDB
1. 写在前面
我逛ruby china
的时候发现很多前辈 12 年左右就开始用Rails + MongoDB
的组合了,但当我终于有一天要用到时候居然没有找到一篇教程= =!
我本来以为就和之前把PostgreSQL
替换成MySQL
差不多,装个驱动,然后database.yml
配置改一下就可以用了,结果发现Active Record
居然没支持MongoDB
……
然后今天装服务器环境,下载比较慢,正好有点时间,遂写下这篇教程。
2. 安装依赖
依赖的话,就两个,一个是驱动,一个是ORM
层,用来替换Active Record
的。不过由于MongoDB
是面向文档的数据库,所以这里更准确的名字叫ODM
(对象文档映射)。
版本的话自己对照文档找合适的即可。
1 | gem 'mongo', '~> 2.12', '>= 2.12.1' |
3. 生成配置文件 & 修改 ORM 配置
安装完成之后需要生成MongoDB
的配置文件:
1 | rails g mongoid:config |
执行过之后你会在你的config
目录下看到一个mongoid.yml
文件,打开之后就按照属性名和注释修改即可。
到这里其实已经可以使用了,当我们使用脚手架生成rails g model XXX attr1:string attr2:integer
时会发现新生成的model
文件是不太一样的,它大概就像下面这样:
1 | class User |
不过实测当你运行rails db:seed
等命令的时候,Rails
还是会去找Active Record
。因此你还需要在config/appliction.rb
文件中添加如下代码:
1 | config.generators do |g| |
然后就可以正常使用了。
4. 最后
试用了两天MongoDB
体验还是相当好的,mongoid
几乎就和Active Record
一样,所以应用层的代码几乎没有太大的变化。
异常捕获需要根据实际情况替换成Mongoid
模块下的异常。属性的话,mongoid
似乎会把_id
和id
当成同一个东西,因此如果需要一个单独维护的id
的话,建议还是起其它名字比较好。
最后就是MongoDB
到底是NoSQL
,头一次在Rails
里没有一条migrate
文件,还真有点不习惯……