0

Sử dụng MongoDB trong Rails app

MongoDb là một NoSQL engine được giới thiệu từ năm 2009. Trong MongoDB thì chúng ta không phải làm việc và bảng và các dòng như trong SQL nữa, thay vào đó là collections và documents. Nó được thiết kế để xử lý với khối lượng dữ liệu lớn, mềm dẻo, dễ dàng mở rộng và hiệu quả.

Installation MongoDB

Ở bài này mình sẽ giới thiệu trên Ubuntu nhé.

Mặc định thì Service của mongoDB sẽ start sau khi cài đặt xong. Để kiểm tra thì bạn sử dụng câu lệnh

sudo service mongod status Nếu bạn thấy dòng chữ Active: active (running) là okie đấy. Tương tự sudo service mongod stop để tắt, sudo service mongod restart nếu bạn muốn khởi động lại.

Sử dụng MongoDB thay cho SQLite mặc định của Rails

Để đi vào cụ thể các sử dụng MongoDB trong rails app như thế nào thì mình sẽ tạo một app demo để các bạn thấy rõ. Và trong app này minh sẽ không dùng database ralationship nữa nên sẽ bỏ tất cả ActiveRecord đi với option --skip-active-record rails new demo --skip-active-record để sử dụng được mongoDB trong rails thì cần một gem đó là Mongoid, đây là một ODM (Object Document Mapper) Framework cho MongoDB. bạn mở Gemfile ra vào thêm gem này vào nhé.

gem "mongoid", git: 'git://github.com/mongoid/mongoid.git'

Sau đó trong terminal gõ lệnh bundle để install. Để sử dụng như relational BD SQLite thì bạn cần phải thêm một file config nữa. rails g mongoid:config Bạn sẽ thấy một file config được tạo ra ở config/mongoid.yml. Không cần phải thay đổi gì cả defaul những gì nó tạo ra cũng đủ dùng rồi.

Giờ tạo một scaffold book với các properites title, author, price để làm việc nào. rails g scaffold book title author price Khi bạn mở file book.rb trong app/models/book.rb bãn sẽ thấy khác hoàn toàn so với việc sử dụng DB relational

class Book
  include Mongoid::Document
  field :title, type: String
  field :author, type: String
  field :price, type: String
end

Không còn phải extend lại ActiveRecord nữa, từ nay bạn cũng chẳng cần đến các file migration mỗi khi cần thay đổi structure của DB nữa. Nếu bạn muốn thêm một trường mới, đơn giản chỉ khai báo vào trong model thôi thêm vào view để tương tác với trường đó. giờ bạn hãy chạy rails s xem thế nào 😄 Khi vào link local:3000/books bạn sẽ vẫn thấy giao diện quen thuộc và bạn có thể create, edit, destroy một book.

Trong DB relational thì mỗi row được tạo ra id sẽ được auto tự động tăn lên. Với MongoDB thì mỗi row của table sẽ ưng với một hash và ID định danh cho mỗi object thì gồm cả chữ lẫn số. Đây là một Object ID luôn có 12bytes.

Collections & Documents

Trong NoSQL thì mỗi Collections được coi như một bảng và mỗi document tương ứng vơi 1 row trong DB relational vậy.
Bạn có thể vào MongoDB interface dễ thao tác tường tự nhưu mysql terminal vậy. Trong file mongoid.yml có chứa database name bạn sẽ dùng tên này để access vào mongo terminal. Database name của mình là demo_development vì thế để vào terminal cuả nó thì ta gõ lệnh sau: mongo demo_development. Để thấy được toàn bộ collecitons thì bạn sẽ sử dùng

> show collections
books

để tìm một record thì bạn sẽ sử dụng command sau: db.collection_name.find()

>db.books.find()
{ "_id" : ObjectId("590017f163703a5733000000"), "title" : "Nhung tam long cao ca ", "author" : "edmondo de amicis", "price" : "50" }
{ "_id" : ObjectId("59001c5a63703a5733000001"), "title" : "Bo Gia(god father)", "author" : " Mario Puzo ", "price" : "89" }
> db.books.find({"price": "89"})
{ "_id" : ObjectId("59001c5a63703a5733000001"), "title" : "Bo Gia(god father)", "author" : " Mario Puzo ", "price" : "89" }

Nếu trong find() không có condition gì thì sẽ query ra toàn bộ, nếu có điều kiện như ở câu query thứ 2 thì sẽ select ra nhưng record phù hợp .

Conclusion

Qua Bài viết này minh đã giới thiệu cái khung của cách sử dụng NoSQL trong Rails app thay vì dùng các SQLite hay MySQL. để tìm hiều thêm về MongoDB thì bạn có thể vào link docs này : https://docs.mongodb.com/ để xem các function và cách sử dụng nhé. Thanks!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí