Giới thiệu:
MongoDB được xếp vào danh mục NoSQL Document. Tất cả các item của
MongoDB đều được lưu trữ dưới dạng JSON Object (ko giống như Redis chỉ
lưu trữ object dạng string).
MongoDB được xây dựng với các quy cách và cấu trúc câu lệnh dựa trên
javascript, cái này sẽ ko nói sâu, ai có nhu cầu truy cập vào CLI của
MongoDB thông qua lệnh mongo thì tự nghiên cứu nhé.
MongoDB có database, mỗi database có nhiều collection, và mỗi collection
chứa nhiều document. Lưu ý là document ko cần thiết phải giống nhau về
cấu trúc, thích vứt gì vào cũng đc. Nếu so sánh với RDBMS, thì database
tương đương database, collection tương đương với table, document tương
đương với row.
Cơ chế của mongo là lưu tất cả dữ liệu trên đĩa, cache index và một số
dữ liệu hay dùng trên RAM (so với Redis là memory-mapped, tức là backup
dữ liệu trên đĩa và lưu tất cả dữ liệu trên RAM). MongoDB chạy trên hệ
thống 32bit bị giới hạn tổng dữ liệu là 2GB, giới hạn này ko có trên hệ
thống 64bit.
Yêu cầu:
> PHP 5.3
MongoDB
PHP extension Mongo
Lưu ý: Tất cả các đoạn lệnh PHP trong bài viết đều nằm trong cặp thẻ
Kết nối đến DB:
- $mongo = new Mongo(); // kết nối đến svr mặc định, giao thức tcp
- $mongo = new Mongo('mongodb://username:password@host');
Chọn database:
- $db = $mongo->selectDB('sieuquay');
- $collection = $db->selectCollection('user');
- $user = new stdClass();
- $user->username = 'katz';
- $user->email = 'ducntq@gmail.com';
- $user->active = true;
- $user->age = 25;
- $user->password = md5salt('abc123'); // cái này k phải built-in method đâu nhá
- $job1 = new stdClass();
- $job1->name = 'Developer';
- $job1->active = true;
- $job2 = new stdClass();
- $job2->name = 'Lover';
- $job2->active = true;
- $collection->insert($user);
Bam, xong! Nếu xong trong mongo shell, thì cái item kia sẽ có dạng cấu trúc sau:
- {
- "_id": "abc123sadjasdjkak",
- "username": "katz",
- "email": "ducntq@gmail.com",
- "active": true,
- "age": 25,
- "password": "dsaO$I@UHDSAB",
- "jobs": [
- {
- "name": "Developer",
- "active": true
- },
- {
- "name": "Lover",
- "active": true
- }
- ]
- }
Lưu ý là MongoDB phân biệt rõ ràng kiểu int và string, vì vậy nên ép về đúng kiểu lúc insert để tiện đường sau này. Cái này là rút ra từ kinh nghiệm bản thân
Update:
Query:
Tìm nhiều bản ghi:
- foreach ($cursor as $user) {
- // do something with user
- }
hoặc dùng cách này để không phải dùng foreach mà có luôn một array tất cả các item:
Tìm một bản ghi, lưu ý method này luôn trả về array assoc, key sẽ là attribute của item:
Tìm user hơn 24 tuổi:
Danh sách tất cả operator xem ở đây:
http://docs.mongodb.org/manual/reference/operator/
Tìm user hơn 24 tuổi và active:
Tìm user có job là Lover:
- $users = $collection->find()->skip(20);
- $users = $collection->find()->skip(20)->limit(10);
Sort asc thì dùng giá trị 1:
Sort desc thì dùng giá trị -1:
Xoá user:
Giá trị 1 cho sort ASC, -1 cho sort DESC:
Index email unique, chạy background lúc index (tức là async):
Index nhiều attribute: