MongoDB là một hệ cơ sở dữ liệu NoSQL mã nguồn mở, được viết bằng C++, với nhiều tính năng tuyệt vời như map-reduce, auto sharding, mở rộng, tính sẵn sàng cao… Đây là một hệ cơ sở dữ liệu có nét khá giống cơ sở dữ liệu quan hệ - Quản lý bằng command line hoặc bằng GUI như RockMongo hoặc phpMoAdmin. Hiện tại MongoDB cũng được dùng trong một số dự án của các công ty lập trình bên cạnh MySQL, SQL Server hoặc Oracle.
Bài viết này sẽ đi sâu vào chi tiết cài đặt và sử dụng MongoDB. Do đó nếu cần tìm hiểu thêm về MongoDB và NoSQL, bạn có thể đọc thêm bài viết tại //bigsonata.com/mongodb/
Trong phần dưới đây sẽ minh họa việc cài đặt trên Windows 7. Lưu ý là hiện tại MongoDB cung cấp hai phiên bản cài đặt dạng .MSI và gói cài dạng .ZIP. Bài viết sẽ minh họa gói cài trên tập tin .ZIP. Chỉ cần tải tập tin này về, giải nén, cấu hình thư mục data và bắt đầu nó với lệnh “mongod”.
1. Tải MongoDB
Bạn hãy tải nó từ //www.mongodb.org/downloads. Chọn phiên bản 32-bit hoặc 64-bit. Tuy nhiên phiên bản mới nhất hiện tại 3.0 chỉ hỗ trợ 64-bit. Do đó nếu máy bạn nào chạy 32-bit có thể chọn các phiên bản cài đặt trước bằng cách nhấn liên kết Previous Production Releases. Giải nén vào thư mục nào đó chẳng hạn như D:mongodb.
2. Tổng quan về thư mục MongoDB
Trong MongoDB, nó chỉ chứa hơn mười tập tin thực thi (exe) trong thư mục bin. Điều này là sự thật, và đó là những tập tin cần thiết cho MongoDB.
Lưu ý là nên đưa thư mục bin của MongoDB vào biến môi trường của Windows để có thể truy cập các lệnh từ CMD một cách dễ dàng.
3. Tập tin cấu hình
Tạo tập tin cấu hình cho MongoDB có nội dung như sau, nó chỉ là tập tin văn bản thường. Ví dụ D:mongodbmongo.config
##store data here
dbpath=D:mongodbdata
##all output go here
logpath=D:mongodblogmongo.log
##log read and write operations
diaglog=3
MongoDB cần một thư mục (thư mục data) để lưu trữ dữ liệu của nó. Theo mặc định, nó sẽ lưu trữ trong "C:datadb", hãy tạo thư mục này bằng tay. MongoDB sẽ không tạo ra nó. Bạn cũng có thể chỉ định một thư mục data thay thế với tùy chọn --dbpath.
Lưu ý là bạn nên tạo thư mục data và log như đường dẫn của tập tin cấu hình.
4. Khởi động MongoDB server
Dùng lệnh mongod.exe --config d:mongodbmongo.config để khởi động MongoDB server.
5. Kết nối đến MongoDB
Sử dụng mongo.exe để kết nối đến máy chủ MongoDB đã khởi động.
6. Khởi động MongoDB như một dịch vụ trong Windows
Thêm MongoDB như dịch vụ trong Windows, để nó sẽ bắt đầu khởi động sau mỗi lần hệ thống khởi động lại. Để thực hiện, hãy cài đặt với tham số -install.
d:mongodbin> mongod --config D:mongodbmongo.config –install
Một dịch vụ của Windows có tên là "MongoDB" được tạo ra.
Để bắt đầu dịch vụ MongoDB
net start MongoDB
Để dừng dịch vụ MongoDB
net stop MongoDB
Để gỡ bỏ dịch vụ MongoDB
D:mongodbin>mongod –remove
7. Lỗi thường gặp
Cài đặt MongoDB như service trên Windows 8, nhưng báo lỗi " Access is denied."
C:Userslevientrinh>mongod --config D:mongodbmongo.config --install
Mon Jul 18 20:05:55.154 diagLogging level=3
Mon Jul 18 20:05:55.155 diagLogging using file D:mongodbdata/diaglog.51e54533
Mon Jul 18 20:05:55.155 Trying to install Windows service 'MongoDB'
Mon Jul 18 20:05:55.155 Error connecting to the Service Control Manager: Access
is denied. (5)
Để khắc phục, chạy Command Prompt với quyền quản trị - nhấn chuột phải vào biểu tượng CMD, chọn Run As Administrator.
Nói chung để tránh các lỗi khi chạy MongoDB trên CMD, hãy chạy CMD với quyền quản trị.
8. Tạo database hoặc table (collection)
Trong MongoDB, cả cơ sở dữ liệu và bảng được tạo ra tự động khi dữ liệu lần đầu tiên được đưa vào. Sử dụng use database-name, để chuyển sang cơ sở dữ liệu của bạn (ngay cả khi chúng được tạo hay chưa).
Trong ví dụ dưới đây, sau khi bạn chèn một record duy nhất, cơ sở dữ liệu "account" và bảng "users" được tạo.
C:Windowssystem32>mongo
MongoDB shell version: 2.6.8
connecting to: test
> use account
switched to db account
> db.users.insert({username:"levientrinh",password:"123456"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("54fa73f7461777b731321ada"), "username" : "levientrinh", "pas
sword" : "123456" }
Ba lệnh bạn nên biết.
show dbs - Liệt kê tất cả các cơ sở dữ liệu.
use dụng db_name - chuyển sang db_name.
show collections - liệt kê tất cả các bảng trong cơ sở dữ liệu được lựa chọn hiện tại.
Lưu ý: Trong MongoDB, collection có nghĩa là bảng trong SQL.
9. Chèn một record
Để chèn một record, sử dụng db.tablename.insert ({} dữ liệu) hoặc db.tablename.save ({} dữ liệu), không hiểu tại sao MongoDB tạo ra cả hai.
> db.users.save({username:"google",password:"google123"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("54fa73f7461777b731321ada"), "username" : "levientrinh", "pas
sword" : "123456" }
{ "_id" : ObjectId("54fa754a461777b731321adb"), "username" : "google", "password
" : "google123" }
10. Cập nhật một record
Để cập nhật một record, sử dụng db.tablename.update ({tiêu chí}, {$ set: {giả trị mới}}). Trong ví dụ dưới đây, mật khẩu của người dùng: "levientrinh" được cập nhật.
> db.users.update({username:"levientrinh"},{$set:{password:"hello123"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("54fa73f7461777b731321ada"), "username" : "levientrinh", "pas
sword" : "hello123" }
{ "_id" : ObjectId("54fa754a461777b731321adb"), "username" : "google", "password
" : "google123" }
11. Tìm record
- Tìm tất cả record trong bảng “users”
> db.users.find()
{ "_id" : ObjectId("54fa73f7461777b731321ada"), "username" : "levientrinh", "pas
sword" : "hello123" }
{ "_id" : ObjectId("54fa754a461777b731321adb"), "username" : "google", "password
" : "google123" }
- Tìm record nơi username là “google”
> db.users.find({username:"google"})
{ "_id" : ObjectId("54fa754a461777b731321adb"), "username" : "google", "password
" : "google123" }
- Tìm record nơi độ dài chuỗi trường username lớn hơn bằng 2
db.users.find({$where:"this.username.length<=2"})
- Tìm record có trường username tồn tại
> db.users.find({username:{$exists : true}})
12. Xóa record
Để xóa một record, sử dụng db.tablename.remove ({} tiêu chí). Trong ví dụ dưới đây, record của tên người dùng "google" sẽ bị xóa.
> db.users.remove({username:"google"})
WriteResult({ "nRemoved" : 1 })
> db.users.find()
{ "_id" : ObjectId("54fa73f7461777b731321ada"), "username" : "levientrinh", "pas
sword" : "hello123" }
Để xóa tất cả record từ một bảng, dùng db.tablename.remove()
Để xóa bảng, dùng db.tablename.drop()
13. Indexing
Index giúp bạn tăng tốc độ truy vấn dữ liệu.
- Liệt kê tất cả các index của bảng "users", theo mặc định cột "_id" luôn luôn là khóa chính và tạo ra tự động.
> db.users.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "account.users"
}
]
- Để tạo ra một index, sử dụng db.tablename.ensureIndex(tên cột). Trong ví dụ dưới đây, một index được tạo ra trên cột "username”.
> db.users.ensureIndex({username:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
- Để xóa một index, dùng db.tablename.dropIndex(tên cột). Trong ví dụ dới đây, index của cột “username” bị xóa bỏ.
> db.users.dropIndex({username:1})
{ "nIndexesWas" : 2, "ok" : 1 }
- Để tạo unique index, dùng db.tablename.ensureIndex({tên cột},{unique:true}). Trong ví dụ dưới đây, một unique index được tạo ra trên cột "username".
> db.users.ensureIndex({username:1},{unique:true});
{ "numIndexesBefore" : 2, "note" : "all indexes already exist", "ok" : 1 }
> db.users.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "account.users"
},
{
"v" : 1,
"unique" : true,
"key" : {
"username" : 1
},
"name" : "username_1",
"ns" : "account.users"
}
]
Bạn có thể tham khảo thêm về MongoDB từ tài liệu //docs.mongodb.org/manual/
Lê Viễn Trình
Lê Viễn Trình