Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách sử dụng Mongoose cho các triển khai MongoDB của bạn để tạo ra một giải pháp dựa trên giản đồ dễ dàng hơn để lập mô hình dữ liệu ứng dụng của bạn.
Mongoose là gì?
Mongoose là một “ mô hình hóa đối tượng MongoDB thanh lịch cho Node.js “. Nếu bạn đã sử dụng MongoDB trước đó và thử các thao tác cơ sở dữ liệu cơ bản, bạn có thể nhận thấy rằng MongoDB là "lược đồ ít hơn". Khi bạn đang tìm cách triển khai cơ sở dữ liệu có cấu trúc hơn và muốn tận dụng sức mạnh của MongoDB, Mongoose là một trong những ODM ( O bject D ata M ứng dụng) giải pháp.
Để nhanh chóng chứng minh, bạn chạy lệnh chèn vào tập hợp những người dùng có tên như sau:
db.users.insert({ name : 'Arvind', gender : 'male'});
Và ngay sau đó, bạn có thể chạy:
db.users.insert({ name : 'Arvind', gender : 'male', password : '!@#$'});
và MongoDB sẽ không bao giờ phàn nàn về sự thay đổi số lượng cột (cặp khóa-giá trị). Điều này rất linh hoạt. Nhưng khi bạn muốn giữ cho dữ liệu của mình có tổ chức và có cấu trúc hơn, bạn sẽ cần duy trì điều đó trong mã máy chủ của mình, viết xác thực, đảm bảo rằng không có gì không liên quan được lưu trữ trong một bộ sưu tập. Đây là nơi Mongoose làm cho cuộc sống trở nên dễ dàng.
“Mongoose cung cấp giải pháp đơn giản, dựa trên giản đồ để lập mô hình dữ liệu ứng dụng của bạn và bao gồm tính năng đánh máy, xác thực, xây dựng truy vấn, móc logic nghiệp vụ được tích hợp sẵn và hơn thế nữa , ra khỏi hộp. ”
Cài đặt Node.js &MongoDB
Để sử dụng Mongoose, chúng ta cần cài đặt Node.js. Bạn có thể tìm thấy thông tin tại đây.
Bắt đầu phát triển
Trước tiên, hãy tạo một sân chơi nhỏ để chúng ta có thể vui chơi. Tạo một thư mục mới có tên myMongooseApp và mở terminal / prompt tại đây và chạy:
npm init
Điều này sẽ giúp chúng tôi khởi tạo một dự án nút mới. Điền vào nó theo yêu cầu. Tiếp theo, chúng tôi sẽ cài đặt Mongoose như một phần phụ thuộc vào dự án của chúng tôi. Chạy:
npm install mongoose --save-dev
Sau đó, khởi động dịch vụ MongoDB bằng cách chạy:
mongod
Tiếp theo, tạo một tệp mới có tên là index.js ở gốc và sau đó mở tệp đó trong trình chỉnh sửa yêu thích của bạn. Thêm mã dưới đây:
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/myTestDB'); var db = mongoose.connection; db.on('error', function (err) { console.log('connection error', err); }); db.once('open', function () { console.log('connected.'); });
Ở đây, chúng tôi yêu cầu gói Mongoose kết nối với cơ sở dữ liệu và khởi tạo kết nối. Tên cơ sở dữ liệu của chúng tôi là myTestDB.
Sau đó, chạy:
node index.js
Bây giờ bạn sẽ thấy thông báo được kết nối. Bạn cũng có thể sử dụng gói nút có tên là nút để tự động khởi động lại máy chủ nút khi có thay đổi.
Bây giờ, hộp cát của chúng tôi đã sẵn sàng để chơi!
Lược đồ Mongoose
Các lược đồ giống như những bộ xương, là phần xương cốt cho thấy bộ sưu tập dữ liệu của bạn sẽ trông như thế nào. Nếu bạn đang xử lý một tập hợp người dùng, giản đồ của bạn sẽ trông giống như sau:
Name - String Age - Number Gender - String Date of Birth - Date
Nếu bạn đang xử lý một bộ sưu tập sản phẩm, giản đồ của bạn sẽ trông giống như sau:
SKU - String Name - String Price - Number InStock - Boolean Quantity - Number
Bạn có thể thấy sự thay đổi. Khi dữ liệu của chúng tôi được bảo vệ bằng một lược đồ như thế này, khả năng lưu trữ dữ liệu rác sẽ giảm đáng kể.
Bây giờ chúng ta đã hiểu về các lược đồ, hãy thử và tạo một lược đồ người dùng bằng Mongoose. Quay lại index.js và thêm mã bên dưới:
var Schema = mongoose.Schema; var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean });
Tìm các trường cơ bản liên quan đến người dùng và loại giản đồ của chúng tại đây.
Tiếp theo, chúng tôi sẽ tạo một mô hình từ giản đồ. Thêm:
var User = mongoose.model('User', userSchema);
Vậy là xong, mô hình người dùng của chúng tôi đã sẵn sàng! Chúng tôi sẽ sử dụng đây làm giản đồ cơ sở của mình để chèn người dùng vào cơ sở dữ liệu. Bằng cách này, chúng tôi biết rằng mọi tài liệu trong tập hợp người dùng sẽ có các trường được liệt kê trên lược đồ. Hãy tạo một phiên bản người dùng mới và lưu nó vào DB. Thêm:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true }); arvind.save(function (err, data) { if (err) console.log(err); else console.log('Saved : ', data ); });
Bạn sẽ thấy một cái gì đó như sau:
Saved : { __v: 0, name: 'Arvind', age: 99, DOB: Fri Jan 01 1915 00:00:00 GMT+0530 (IST), isAlive: true, _id: 536a4866dba434390d728216 }
Không phức tạp, không thành vấn đề. API đơn giản và dễ dàng để tương tác với Mô hình.
Giả sử chúng tôi muốn mỗi mô hình có một phương thức có tên isYounger. Phương thức này sẽ trả về true nếu tuổi nhỏ hơn 50 và false nếu lớn hơn. Chúng tôi có thể làm điều này bằng cách truy vấn cơ sở dữ liệu cho người dùng hiện tại, sau đó kiểm tra điều kiện và trả về true hoặc false.
Nhưng nếu chúng ta muốn triển khai phương pháp này cho tất cả các mô hình của lược đồ Người dùng thì sao? Đây là cách chúng tôi thực hiện trong Mongoose:
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/myTestDB'); var db = mongoose.connection; db.on('error', function (err) { console.log('connection error', err); }); db.once('open', function () { console.log('connected.'); }); var Schema = mongoose.Schema; var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }); userSchema.methods.isYounger = function () { return this.model('User').age < 50 ? true : false; } var User = mongoose.model('User', userSchema); var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true }); arvind.save(function (err, data) { if (err) console.log(err); else console.log('Saved ', data ); }); console.log('isYounger : ',arvind.isYounger());
Trên dòng 21, chúng tôi thêm định nghĩa phương thức và kết quả trên dòng 39 sẽ là false. Đây là một cách đơn giản, tiện dụng để thêm các phương thức vào lược đồ của bạn, làm cho nó trở nên hướng đối tượng hơn.
Trong trường hợp bạn có trường mật khẩu, bạn có thể thêm một phương thức như EncryptPassword (), để mã hóa mật khẩu và ComparePassword (), để so sánh mật khẩu khi đăng nhập với chính userSchema. Bạn có thể đọc thêm về Xác thực mật khẩu tại đây.
Ngoài ra Mongoose cũng cung cấp một số tùy chọn khi lược đồ được tạo. Ví dụ:nếu bạn xem phần khai báo giản đồ bên dưới, chúng tôi sẽ chuyển một tùy chọn nghiêm ngặt:false:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }, {strict : false});
Tùy chọn nghiêm ngặt là đúng theo mặc định và nó không cho phép lưu các cặp khóa-giá trị ‘không phải giản đồ’. Ví dụ:điều này sẽ được lưu:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true });
Trong khi:
var arvind = new User({ name : 'Arvind', age : 99, DOB : '01/01/1915', isAlive : true, bucketList : [{...}, {...}, {...} ] });
Tất cả những điều trên sẽ được lưu trừ mảng bucketList vì nó không được khai báo như một phần của lược đồ. Vì vậy, không khách hàng nào sử dụng dịch vụ của bạn sẽ có thể đưa dữ liệu không hợp lệ vào bộ sưu tập của bạn.
Một lựa chọn thú vị khác là bộ sưu tập. Nếu bạn không muốn tên kiểu máy của mình giống với tên bộ sưu tập, bạn có thể đặt tên dưới dạng một tùy chọn như:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }, {collection : 'appusers'});
Bạn có thể tìm thấy danh sách các tùy chọn khác tại đây.
Với Mongoose, Bạn cũng có thể thêm sự kiện vào lược đồ của mình như lưu trước hoặc lưu sau, nơi bạn có thể thực hiện xác thực, xử lý dữ liệu hoặc chạy các truy vấn khác trong các sự kiện tương ứng. Các phương thức này được gọi là Phần mềm trung gian.
Một ví dụ đơn giản có thể là phần mềm trung gian song song như:
var userSchema = new Schema({ name : String, age : Number, DOB : Date, isAlive : Boolean }) schema.pre('save', true, function (next, done) { // calling next kicks off the next middleware in parallel next(); doAsync(done); });
Bạn có thể đọc thêm về phần mềm trung gian tại đây. Trong bài đăng tiếp theo, chúng ta sẽ nói nhiều hơn về việc sử dụng Yeoman để tự động tạo giàn giáo cho các dự án MongoDB của bạn.
Cảm ơn vì đã đọc. Nhận xét.
@ arvindr21