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文件,还真有点不习惯……