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 http://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ừ http://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 http://docs.mongodb.org/manual/ Lê Viễn Trình Lê Viễn Trình |