0

BASIC CRUD APPLICATION USING MONGODB AND PHP

1. Giới thiệu:

Bài viết sau đây sẽ giới thiệu về cơ sở dữ liệu MongoDB và sử dụng php để thực hiện các thao tác cơ bản CRUD (create, read,  update, delete). Nội dung bài blog sẽ đề cập về các vấn đề sau:

  • Tổng quan về cơ sở dữ liệu MongoDB
  • Cài đặt MongoDB
  • Sử dụng php kết nối với cơ sở dữ liệu MongoDB
  • Các thao tác truy vấn cơ bản tạo mới, sửa, xóa và đọc các documents từ collection

2. Tổng quan về MongoDB.

MongoDB là cơ sở dữ liệu dạng document cung cấp hiệu năng cao, khả năng chủ động cao và dễ dàng mở rộng thuộc vào nhóm cơ sở dữ liệu NoSQL.

  • Cơ sở dữ liệu dạng document:

  • Document (đối tượng) ánh xạ với các loại dữ liệu của ngôn ngữ lập trình.

  • Sử dụng các documents và mảng làm giảm việc sử dụng join.

  • Cơ chế schema động giúp việc đa hình trở nên dễ dàng hơn.* Hiệu suất cao:

  • Khả năng chủ động cao:

  • Mở rộng dễ dàng:

  • Thao tác nâng câo

Nguyên lý của MongoDB: Databases, Collections và Documents

  • Databases: MongoDB nhóm các dữ liệu vào trong cơ sở dữ liệu theo một cách tương tự cơ sở dữ liệu quan hệ. Trong RDBMS, một cơ sở dữ liệu là tập hợp các bảng, stored procedures, views, … Trong MongoDB, một cơ sở dữ liệu là một tập các colllections, articles, authors, comments, cateogries,...
  • Collection: Một collection tương đương với 1 bảng trong RDBMS. Documents nằm trong collection sẽ có các trường khác nhau. Thông thường, tất cả các documents trong 1 collection sẽ tương tự nhau hoặc cùng chung mục đích.
  • Documents: là 1 bản ghi trong MongoDB và là đơn vị cơ bản của dữ liệu trong MongoDB. Documents tương tự như các object JSON tuy nhiên đã tồn tại trong cơ sở dữ liệu theo kiểu type-rich (BSON). 1 documents bao gồm tập các trường với từng cặp key-value (Có thể hiểu là mảng nhiều chiều).

3. Cài đặt MongoDB

MongoDB tương thích với nhiều hệ điều hành khác nhau. Tuy nhiên, ở bài blog này sẽ chỉ nói đến cách cài đặt trên Ubuntu Linux. Với các hệ điều hành khác, các bạn xem thêm trong tài liệu của MongoDB.

_sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10__
__#__
__echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list_

Tiếp theo cập nhật repository và cài đặt phiên bản mới nhất của MongoDB.

_sudo apt-get update__
__sudo apt-get install mongodb-10gen_

Như vậy là hoàn thành việc cài đặt MongoDB. Bây giờ thực hiện 2 lệnh sau để bắt đầu và tạm dừng MongoDB.

_sudo service mongodb start__
__sudo service mongodb stop_

Trong trường hợp xảy ra lỗi hãy chạy các lệnh sau:

_sudo mongod --fork --logpath /var/log/mongodb/mongodb.log__
__#or__
__sudo mongod -f /etc/mongodb.conf_

Cài đặt PHP driver cho MongoDB.

MongoDB server làm việc với web server chứ không phải PHP. Vì vậy, chúng ta cần PHP-MongoDB driver để PHP có thể nói chuyện được với MongoDB server. Đó là một thư việc của PHP. Cài đặt đơn giản sử dụng pecl thông qua lệnh sau:

_sudo pecl install mongo_

Tiếp theo, config cho php nhận module mongodb.

_sudo -i__
__echo 'extension=mongo.so' >> /etc/php5/apache2/php.ini_

Cuối cùng, khởi oộng lại apache. Để kiểm tra xem cài đặt đã thành công chưa, bạn tạo file phpinfo.php <?php phpinfo();?    bên trong thư mục gốc của apache và mở file này lên. Nếu bạn nhìn thấy mongo thì việc cài đặt đã thành công.

4. Sử dụng PHP kết nối với MongoDB.

Kết nối với MongoDB từ PHP cũng tương tự như kết nối với các cơ sở dữ liệu khác. Host mặc định là ‘localhost’, cổng mặc định là 27017.

//Connect to Mongo $this->mongo = new Mongo('127.0.0.1:27017');

Select database: sau khi thiết lập kết nối với database thành công. Chúng ta sẽ truy cập vào database.

$this->db = $this->mongo->selectDB('mydb');

//Select a Collection/Table $tableName = 'user'; $this->table = $this->db->$tableName;

The Basics (CRUD Operations)

CRUD chuẩn bao gồm create, read, update và delete. Chúng ta lần lượt tìm hiểu từng thao tác thông qua ví dụ quản lý user sau.

  • Create: Việc tạo 1 document không thể dễ dàng hơn. Tạo một mảng và đặt các dữ liệu cần thiết vào method insert của object collection.
public function createUser() {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $insert = array("name" = $name, "email" = $email, "password" = $password);
    $this->table->insert($insert);
}

Method insert lưu trữ dữ liệu dưới dạng collection. Trường _id là trường tự động được thêm cho mỗi object và là duy nhất cho mỗi object. Hoặc, bạn có thể sử dụng method save() để cập nhật các giá document đã có hoặc tạo mới 1 document nếu chưa tồn tại.

  • Reading: Để đọc dữ liệu từ 1 collection, chúng ta sử dụng method find() sẽ lấy tất cả dữ liệu của 1 collection. Tuy nhiên, findOne() sẽ trả về duy nhất một document tương ứng với điều kiện query.
//Get All Users_
function getUsers($limit = '4') {
    $users = $this->table->find()->limit($limit);
    return $users;
}

//Getting selected user info by email
function getUserByEmail($email) {
    $query = array('email'= $email);
    $aUserInfo = $this->table->findOne($query);
    return $aUserInfo;
}
  • Updating: Là chỉnh sửa một document đã có hoặc tất cả documents trong collection. Mặc định hàm update() sẽ cập nhật chỉ 1 document. Nếu multi option được set là true, thì hàm update() sẽ cập nhật cho tất cả các documents phù hợp với query.
//Update User
public function updateUser($email) {
     $query = array('email'= $email);
     //Get the existing info of the user
     $aUserInfo = $this->table->findOne($query);

     //Assign New Values
     $aUserInfo['name'] = $_POST['name'];
     $aUserInfo['email'] = $_POST['email'];
     $aUserInfo['password'] = $_POST['password'];

     //Update the User Info
     $this->table->save($aUserInfo);
}
  • Deleting: Là xóa một hoặc nhiều documents khỏi collection.
function deleteUser($email) {
     $this->table->remove(array('email' = $email));
}

Tài liệu tham khảo:

http://www.sitepoint.com/building-simple-blog-app-mongodb-php/

http://docs.mongodb.org/manual/core/document/

Mã nguồn đầy đủ có thể download tại đây.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.