The very first question arises is ,What is MongoDB ? and How its different ?
What is MongoDB :-
MongoDB is a document-based database as opposed to traditional RDBMS (Relational Database Management System) like Oracle & MySQL.
Mongo DB is a document based database means, it stores data in files (like a text file) in BSON (Binary JSON) format.
In Ubuntu, to install the MongoDB package use the command :-
sudo apt-get install mongodb
Next, you have to install mongo-ruby-driver.
Installing Mongo-Ruby-Driver :-
The MongoDB Ruby driver is the 10gen-supported driver for MongoDB. It’s written in pure Ruby, with a recommended C extension for speed.
10gen is a software company that has developed and provides commercial support for the open source database MongoDB.
Install the mongo gem (mongo-ruby-driver) by using the below command :-
gem install mongo
For significantly improved performance, install the bson_ext gem. Using compiled C instead of Ruby, this gem speeds up BSON serialization greatly.
gem install bson_ext
Let’s first check whether the above step are done properly or not.
We will try to make connection object :-
Open a terminal, then open irb
require 'mongo' connection = Mongo::Connection.new
In the context of a Rails application MongoDB provide functionality equivalent to, but distinct from, ActiveRecord. Because Mongo is a document-based database, these mappers are called Object Document Mappers (ODM) as opposed to Object Relational Mappers (ORM).
For Mongo DB, several mappers are available:
- MongoMapper from John Nunemaker
- Mongoid from Durran Jordan
- Mongomatic from Ben Myles
- MongoODM from Carlos Paramio
- MongoModel from Sam Pohlenz
- DriverAPILayer from Alexey Petrushin
All the mappers are build on top of the basic Ruby driver.
I will be describing MongoMapper in this blog.
Install the mongo_mapper gem using the commnad :-
gem install mongo_mapper
Create a new rails application by skipping Active Record by using the command :-
rails new mongo_app --skip-active-record
Open the Gemfile of your application and ad the following lines to it
gem 'mongo' gem 'mongo_mapper' gem 'bson' gem 'bson_ext'
Now run bundle install from the terminal and try to start the rails console.
As it is written in error : see https://github.com/sstephenson/execjs
Now you should be able to start the rails console without anr error (This step is just for checking purpose).
Create a new file named mongo.rb in config/initializers folder. This file will be responsible for establishing a connection between your rails application and MongoDB.
‘localhost’ is the Database host to which your rails application should connect.
27017 is the default port for MongoDB
Now we will try to create a basic scaffold for an entity say User.
rails g scaffold User name:string age:integer --skip-migration --orm mongo_mapper
In the above command, we have skipped migration since we are using Active record and also telling rails to use mongo_mapper as ORM.
Now your basic scaffold application is ready. Start the rails server of your application and try some CRUD operations.
Some Configuartion related information for MongoDB :-
The configuration file for mongodb which is mongodb.conf file resides in the location :- /etc/mongodb.conf
The above file contains the path for data files (Binary JSON files where data is stored) and log file for MongoDB.
You can check the default location of data files in dbpath variable and log files location in logpath variable in mongodb.conf file.
To change the location of the data files and log files —> just edit the dbpath and logpath variable of mongodb.conf file.
Alternatively, it can also be changed from terminal, by using the commands given below
mongod dbpath ——> It gives the current path
mongod --dbpath <new db path>
mongod --logpath <new log path>
I hope this post will get you started with MongoDB in your rails application.