Mongoose là gì

     

Mongoose là một thư viện mô hình hóa đối tượng (Object Data Model – ODM) cho MongoDB và Node.js. Nó quản lý mối quan hệ giữa dữ liệu, cung cấp sự xác nhận giản đồ và được sử dụng để dịch giữa các đối tượng trong mã và biểu diễn các đối tượng trong MongoDB.

Bạn đang xem: Mongoose là gì

Bạn đang xem: Mongoose là gì

Bạn đang xem : Mongoose Là Gì

*
MongoDB là một cơ sở tài liệu NoSQL. Bạn hoàn toàn có thể tàng trữ những JSON trong đó, và cấu trúc của những tài liệu này hoàn toàn có thể đổi khác vì nó không bắt buộc như những cơ sở tài liệu SQL. Đây là một trong những lợi thế của việc sử dụng NoSQL vì nó tăng vận tốc tăng trưởng ứng dụng và giảm sự phức tạp của việc tiến hành .

Dưới đây là ví dụ về cách dữ liệu được lưu giữ trong cơ sở dữ liệu Mongo vs. SQL:


Bạn đang đọc: Giới Thiệu Về Mongoose Là Gì, Cách Sử Dụng Mongoose Với Node


Thuật ngữ – TerminologiesCollectionsCollections ở Mongo tương tự với những bảng trong những cơ sở tài liệu quan hệ. Chúng hoàn toàn có thể chứa nhiều tài liệu JSON .Documents“ Documents ” tương tự với những bản ghi trong SQL. Mặc dù một dòng SQL hoàn toàn có thể tìm hiểu thêm tài liệu trong những bảng khác, những tài liệu Mongo thường phối hợp trong một tài liệu .Fields“ Fields ” thuộc tính tương tự như như những cột trong một bảng SQL .SchemaTrong khi Mongo là schema-less, SQL định nghĩa một lược đồ trải qua định nghĩa bảng. Một lược đồ Mongoose là một lớp cấu trúc tài liệu được thi hành qua lớp ứng dụng .Fields“ Models ” là quy mô bậc cao có một lược đồ và tạo ra một bộc lộ của một tài liệu tương tự với những bản ghi trong một cơ sở tài liệu quan hệ .Cài đặt MongoSchemaTrong khi Mongo là schema-less, SQL định nghĩa một lược đồ trải qua định nghĩa bảng. Một lược đồ Mongoose “ là một cấu trúc tài liệu tài liệu ( hoặc hình dạng của tài liệu ) được thi hành qua lớp ứng dụng .Cài đặt MongoDB thích hợp cho Hệ quản lý của bạn từ Website MongoDB https://docs.mongodb.com/manual/installation/ và làm theo hướng dẫn thiết lậpTạo ĐK cơ sở tài liệu sandbox không lấy phí trên mLabCài đặt Mongo bằng Docker nếu bạn sử dụng dockerHãy điều hướng qua một số ít yếu tố cơ bản của Mongoose bằng cách tiến hành quy mô tài liệu cho một sổ địa chỉ đơn thuần .Cài đặt NPMChúng ta hãy vào thư mục dự án Bất Động Sản và khởi tạo dự án Bất Động Sản của tất cả chúng tanpm init – yCài đặt Mongoose và một thư viện xác nhận với lệnh sau :npm install mongoose validatorLệnh thiết lập trên sẽ thiết lập phiên bản mới nhất của thư viện. Cú pháp Mongoose trong bài báo này đặc trưng cho Mongoose v5 và hơn thế nữa .Kết nối cơ sở dữ liệuTạo tệp. / src / database.js trong thư mục gốc của dự án Bất Động Sản .Tiếp theo, tất cả chúng ta sẽ tạo thêm một một phương pháp liên kết với cơ sở tài liệu .

Kết nối sẽ thay đổi tùy theo cài đặt của bạn.

let mongoose = require ( “ mongoose ” ) ; const server = “ 127.0.0.1 : 27017 ” ; / / REPLACE WITH YOUR DB SERVERconst database = “ fcc-Mail ” ; / / REPLACE WITH YOUR DB NAMEclass Database { constructor ( ) { this. _connect ( ) } _connect ( ) { mongoose.connect ( ` mongodb : / / USD { server } / USD { database } ` ). then ( ( ) => { console.log ( “ Database connection successful ” ) } ). catch ( err => { console.error ( “ Database connection error ” ) } ) } } module.exports = new Database ( ) Lệnh nhu yếu ( “ mongoose ” ) trả về phía trên trả về một đối tượng người tiêu dùng Singleton. Điều này có nghĩa là lần tiên phong bạn gọi ( “ mongoose ” ), nó tạo ra một lớp Mongoose và trả lại. Trong những cuộc gọi tiếp theo, nó sẽ trả lại cùng một thành viên đã được tạo và trả lại cho bạn lần tiên phong vì cách nhập / xuất mô-đun trong ES6 .

Xem thêm: Từ Điển Tiếng Việt " Quy Luật Là Gì ? Định Nghĩa Và Phân Loại Quy Luật

Tương tự như vậy, tất cả chúng ta đã chuyển lớp Cơ sở tài liệu của tất cả chúng ta thành một singleton bằng cách trả lại một bộc lộ của lớp trong module.exports vì tất cả chúng ta chỉ cần một liên kết duy nhất với cơ sở tài liệu .

ES6 làm cho chúng ta dễ dàng tạo mẫu singleton (ví dụ đơn) vì mô-đun hoạt động như thế nào bằng cách lưu trữ các phản hồi của một tệp tin được nhập trước đó.


Mongoose Schema vs. Model

Mongoose Model gồm có Mongoose schema. Mongoose schema xác lập cấu trúc của tài liệu, những giá trị mặc định, xác nhận. trong khi Mongoose Model cung ứng một giao diện cho cơ sở tài liệu để tạo, truy vấn, update, xoá những bản ghi .Tạo ra một quy mô Mongoose Model gồm có hầu hết là ba phần :Tham khảo Mongooselet mongoose = require ( “ mongoose ” )Tài liệu tìm hiểu thêm này sẽ giống với tài liệu đã được trả về khi chúng tôi liên kết với cơ sở tài liệu, có nghĩa là lược đồ và những định nghĩa quy mô sẽ không cần phải liên kết một cách rõ ràng với cơ sở tài liệu .Xác định SchemaMột giản đồ định nghĩa gia tài gia tài trải qua một đối tượng người dùng mà tên khóa tương ứng với tên thuộc tính trong bộ sưu tập .Các Loại schena sau được được cho phép :ArrayBooleanBufferDateMixed ( A generic / flexible data type ) NumberObjectIdStringHỗn hợp và ObjectId được định nghĩa theo nhu yếu ( “ mongoose ” ) Schema. Types .Xuất mô hìnhChúng ta gọi constructor quy mô trên Mongoose và truyền nó cho tên bộ sưu tập và một tham chiếu đến lược đồ .module.exports = mongoose.model ( “ E-Mail ”, emailSchema )Chúng ta hãy tích hợp đoạn mã trên thành. / src / models / email.js để xác lập nội dung của một quy mô cơ bản :

Create Record

Hãy tạo một bộc lộ của quy mô email và lưu nó vào cơ sở tài liệu :Trường _id được Mongo tạo tự động hóa và là một khóa chính của collection. Giá trị của nó là duy nhất. Giá trị của trường email được trả lại. Lưu ý nó là chữ in thường vì thuộc tính đúng trong giản đồ lowercase : true __v là thuộc tính versionKey được đặt trên mỗi tài liệu khi được tạo bởi Mongoose. Giá trị của nó gồm có nội dung tài liệu. Nếu bạn nỗ lực tạo tiếp với dự liệu như trên, bạn sẽ nhận được một lỗi vì trường email tất cả chúng ta định nghĩa là duy nhất .

Xem thêm: Sự Gian Lận ( Fraud Là Gì ? Định Nghĩa, Ví Dụ, Giải Thích Fraud Là Gì

Fetch Record

Hãy thử lấy lại bản ghi tất cả chúng ta đã lưu vào cơ sở tài liệu trước đó. Lớp quy mô cho thấy một số ít giải pháp tĩnh và để thực thi trên cơ sở tài liệu. Bây giờ tất cả chúng ta sẽ tìm kiếm hồ sơ mà tất cả chúng ta đã tạo ra trước đó bằng cách sử dụng giải pháp tìm và gửi email dưới dạng cụm từ tìm kiếm .Hãy tạo một giản đồ người dùng trong / src / models / user.js với fieldsfirstName và lastName :let mongoose = require ( “ mongoose ” ) let userSchema = new mongoose. Schema ( { firstName : String, lastName : String } ) module.exports = mongoose.model ( “ User ”, userSchema ) Virtual PropertyMột số thuộc tính ảo không nhất thiết phải là sống sót trong cơ sở tài liệu. Chúng ta hoàn toàn có thể thêm nó vào giản đồ của tất cả chúng ta như một người trợ giúp để có được và thiết lập những giá trị .Hãy tạo một thuộc tính ảo gọi là fullName hoàn toàn có thể được sử dụng để đặt những giá trị trên firstName và lastName và lấy chúng như một giá trị tích hợp khi đọc :

userSchema.virtual(“fullName”).get(function() { return this.firstName + ” ” + this.lastName})userSchema.virtual(“fullName”).set(function(name) { let str = name.split(” “) this.firstName = str this.lastName = str})Gọi lại để nhận và đặt phải sử dụng từ khoá chức năng vì chúng ta cần truy cập vào mô hình thông qua từ khóa này. Sử dụng chức năng mũi tên chất béo sẽ thay đổi điều này đề cập đến.

Bây giờ, tất cả chúng ta hoàn toàn có thể đặt firstName và lastName bằng cách gán một giá trị cho fullName :let Model = new UserModel ( ) Model. fullName = “ Thomas Anderson ” console.log ( Model. toJSON ( ) ) / / Output Mã Sản Phẩm fields as JSONconsole. log ( ) console.log ( Model. fullName ) / / Output the full nameĐoạn mã trên sẽ xuất ra những điều sau : { _id : 5 a7a4248550ebb9fafd898cf, firstName : “ Thomas ”, lastName : “ Anderson ” }Các phương thứcChúng ta hoàn toàn có thể tạo ra những phương pháp tuỳ chỉnh trên lược đồ và truy vấn chúng trải qua mô hình mẫu. Những giải pháp này sẽ có quyền truy vấn vào đối tượng người tiêu dùng quy mô và chúng hoàn toàn có thể được sử dụng. Ví dụ, tất cả chúng ta hoàn toàn có thể tìm toàn bộ những người có cùng tên .Trong ví dụ này, tất cả chúng ta hãy tạo một hàm để trả lại tên cho người dùng hiện tại. Hãy thêm một phương pháp helper tùy chỉnh gọi là getInitials vào giản đồ :userSchema. methods. getInitials = function ( ) { return this. firstName + this. lastName } Phương pháp này sẽ hoàn toàn có thể truy vấn trải qua một quy mô ví dụ :let Model = new UserModel ( { firstName : “ Thomas ”, lastName : “ Anderson ” } ) let initials = Model. getInitials ( ) console.log ( initials ) / / This will output : TAPhương pháp tĩnhTương tự như những phương pháp dụ, tất cả chúng ta hoàn toàn có thể tạo những phương pháp tĩnh trên lược đồ. Hãy tạo ra một giải pháp để lấy toàn bộ người dùng trong cơ sở tài liệu :userSchema. statics. getUsers = function ( ) { return new Promise ( ( resolve, reject ) => { this.find ( ( err, docs ) => { if ( err ) { console.error ( err ) return reject ( err ) } resolve ( docs ) } ) } ) } Gọi getUsers trên lớp Model sẽ trả lại tổng thể người dùng trong cơ sở tài liệu :

UserModel.getUsers() .then(docs => { console.log(docs) }) .catch(err => { console.error(err) })Thêm dụ và phương pháp tĩnh là một cách tiếp cận tốt đẹp để thực hiện một giao diện tương tác cơ sở dữ liệu trên các bộ sưu tập và hồ sơ.MiddlewareMiddleware là các chức năng chạy ở các giai đoạn cụ thể của đường ống dẫn. Mongoose hỗ trợ trung gian cho các hoạt động sau: