Mongoose là 1 trong tlỗi viện quy mô hóa đối tượng người dùng (Object Data Model - ODM) mang lại MongoDB với Node.js. Nó cai quản mối quan hệ giữa tài liệu, hỗ trợ sự chứng thực giản vật dụng cùng được thực hiện nhằm dịch giữa các đối tượng người dùng trong mã với màn trình diễn những đối tượng người dùng vào MongoDB.

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

*

MongoDB là 1 cửa hàng dữ liệu NoSQL. quý khách hàng rất có thể tàng trữ những JSON trong các số ấy, với cấu trúc của các tư liệu này có thể thay đổi bởi vì nó ko nên nlỗi những các đại lý tài liệu SQL. Đây là một trong số những ưu thế của việc thực hiện NoSQL vì chưng nó tăng tốc độ cải cách và phát triển vận dụng với bớt sự tinh vi của việc tiến hành.

Dưới đây là ví dụ về cách dữ liệu được gìn giữ vào các đại lý tài liệu Mongo vs. SQL:

*

Thuật ngữ - Terminologies

Collections

Collections nghỉ ngơi Mongo tương đương với những bảng trong số cơ sở tài liệu dục tình. Chúng rất có thể chứa nhiều tư liệu JSON.

Documents

"Documents" tương đương cùng với những bản ghi trong SQL. Mặc cho dù một chiếc Squốc lộ rất có thể tham khảo tài liệu trong số bảng không giống, những tư liệu Mongo hay phối hợp vào một tư liệu.

Fields

"Fields" thuộc tính tựa như như những cột vào một bảng Squốc lộ.

Schema

Trong lúc Mongo là schema-less, Squốc lộ có mang một lược thứ trải qua tư tưởng bảng. Một lược thiết bị Mongoose là 1 lớp cấu tạo tài liệu được thi hành qua lớp vận dụng.

Fields

"Models" là mô hình bậc cao có một lược đồ và tạo ra một biểu thị của một tài liệu tương tự cùng với các bản ghi trong một cửa hàng dữ liệu quan hệ nam nữ.

Cài đặt Mongo

SchemaTrong Lúc Mongo là schema-less, Squốc lộ tư tưởng một lược thiết bị trải qua quan niệm bảng. Một lược đồ Mongoose "là 1 trong những kết cấu tài liệu tài liệu (hoặc mẫu mã của tài liệu) được thực hiện qua lớp vận dụng.

Cài đặt MongoDB tương thích đến Hệ điều hành quản lý của người tiêu dùng từ Website MongoDB https://docs.mongodb.com/manual/installation/ với làm theo giải đáp thiết lập đặt

Tạo ĐK các đại lý dữ liệu sandbox miễn chi phí bên trên mLabCài đặt Mongo bằng Docker nếu bạn thực hiện dockerHãy điều hướng qua một trong những sự việc cơ phiên bản của Mongoose bằng phương pháp triển khai quy mô dữ liệu cho 1 sổ xúc tiến dễ dàng.

Cài đặt NPMChúng ta hãy vào tlỗi mục dự án cùng khởi chế tạo ra dự án của chúng ta

npm init -y

Cài đặt Mongoose với một tlỗi viện xác thực cùng với lệnh sau:

npm install mongoose validatorLệnh cài bỏ lên sẽ thiết lập phiên bản mới nhất của tlỗi viện. Cú pháp Mongoose trong bài bác báo này đặc trưng đến Mongoose v5 với không dừng lại ở đó nữa.

Kết nối cơ sở dữ liệuTạo tệp ./src/database.js vào thỏng mục nơi bắt đầu của dự án công trình.

Tiếp theo, chúng ta sẽ khởi tạo thêm 1 một cách tiến hành kết nối cùng với đại lý dữ liệu.

Kết nối đã đổi khác tùy theo thiết đặt của bạn.

let mongoose = require("mongoose");const VPS = "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://$server/$database`) .then(() => console.log("Database connection successful") ) .catch(err => console.error("Database connection error") ) module.exports = new Database()Lệnh những hiểu biết ("mongoose") trả về bên trên trả về một đối tượng người dùng Singleton. Điều này Tức là lần thứ nhất bạn điện thoại tư vấn ("mongoose"), nó tạo ra một tấm Mongoose và trả lại . Trong những cuộc hotline tiếp theo sau, nó đã trả lại cùng một thành viên đã làm được sản xuất và trả lại cho bạn lần trước tiên bởi phương pháp nhập / xuất mô-đun trong ES6.

*

Tương tự điều này, bọn họ sẽ đưa lớp Trung tâm dữ liệu của bọn họ thành một singleton bằng phương pháp trả lại một miêu tả của phần bên trong module.exports vị họ chỉ cần một kết nối tốt nhất với đại lý dữ liệu.

Xem thêm: Sub District Là Gì - Cách Viết Địa Chỉ Trong Tiếng Anh

ES6 khiến cho họ dễ dãi tạo thành mẫu singleton (ví dụ đơn) bởi mô-đun vận động ra sao bằng cách lưu trữ những đánh giá của một tệp tin được nhập trước kia.

Mongoose Schema vs. Model

Mongoose model bao gồm Mongoose schema. Mongoose schema xác định kết cấu của tư liệu, các giá trị mang định, xác thực. trong những lúc Mongoose mã sản phẩm hỗ trợ một đồ họa mang đến cửa hàng tài liệu nhằm sản xuất, tầm nã vấn, cập nhật, xoá các phiên bản ghi.

Tạo ra một mô hình Mongoose Mã Sản Phẩm bao hàm hầu hết là cha phần:

Tmê mệt khảo Mongooselet mongoose = require("mongoose")

Tài liệu tham khảo này vẫn tương đương cùng với tư liệu đã làm được trả về Khi chúng tôi kết nối cùng với cơ sở tài liệu, có nghĩa là lược vật cùng các khái niệm mô hình đang không cần thiết phải liên kết một bí quyết rõ ràng với đại lý dữ liệu.

Xác định SchemaMột giản thứ có mang gia sản tài sản thông qua một đối tượng người tiêu dùng cơ mà thương hiệu khóa tương xứng cùng với tên nằm trong tính vào tủ đồ.

Các Loại schemãng cầu sau được mang đến phép:

ArrayBooleanBufferDateMixed (A generic / flexible data type)NumberObjectIdStringHỗn phù hợp cùng ObjectId được quan niệm theo những hiểu biết ("mongoose") Schema.Types.

Xuất tế bào hìnhChúng ta gọi constructor quy mô trên Mongoose cùng truyền nó mang đến thương hiệu tủ đồ và một tđam mê chiếu mang đến lược đồ vật.

module.exports = mongoose.model("Email", emailSchema)

Chúng ta hãy phối kết hợp đoạn mã bên trên thành ./src/models/gmail.js nhằm xác minh ngôn từ của một mô hình cơ bản:

Create Record

Hãy tạo nên một mô tả của mô hình email với lưu nó vào các đại lý dữ liệu:

Trường _id được Mongo tạo nên auto và là một trong những 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ị trực thuộc tính đúng trong những giản đồ lowercase:true __v là nằm trong tính versionKey được đặt lên trên từng tài liệu Khi được chế tạo vì Mongoose. Giá trị của nó bao gồm câu chữ tư liệu.Nếu chúng ta nỗ lực chế tạo ra tiếp với dự liệu nlỗi bên trên, bạn sẽ nhận ra một lỗi vì trường gmail bọn họ quan niệm là duy nhất.

Fetch Record

Hãy test đem lại phiên bản ghi họ đang lưu giữ vào các đại lý tài liệu trước đó. Lớp quy mô cho biết thêm một số cách thức tĩnh và để thực hiện trên các đại lý tài liệu. Bây tiếng bọn họ vẫn tìm kiếm làm hồ sơ nhưng mà chúng ta vẫn tạo ra trước đó bằng cách áp dụng phương thức tìm cùng gửi email dưới dạng nhiều tự search tì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ố trực thuộc tính ảo không tốt nhất thiết đề xuất là trường tồn vào các đại lý dữ liệu. Chúng ta hoàn toàn có thể thêm nó vào giản thứ của họ nlỗi một tín đồ giúp sức để sở hữu được cùng tùy chỉnh cấu hình các cực hiếm.

Hãy tạo nên một thuộc tính ảo call là fullName có thể được áp dụng để tại vị các cực hiếm bên trên firstName cùng lastName và rước bọn chúng nlỗi một quý hiếm kết hợp Lúc đọc:

userSchema.virtual("fullName").get(function() return this.firstName + " " + this.lastName)userSchema.virtual("fullName").set(function(name) let str = name.split(" ") this.firstName = str<0> this.lastName = str<1>)Hotline lại để nhận cùng đặt nên áp dụng keywords tính năng do bọn họ cần truy cập vào quy mô thông qua từ khóa này. Sử dụng công dụng mũi thương hiệu chất bự đã biến hóa vấn đề này đề cập tới.

Bây tiếng, chúng ta có thể đặt firstName và lastName bằng cách gán một quý hiếm mang lại fullName:

let Model = new UserModel()model.fullName = "Thomas Anderson"console.log(Model.toJSON()) // đầu ra Mã Sản Phẩm fields as JSONconsole.log()console.log(Mã Sản Phẩm.fullName) // Output the full nameĐoạn mã bên trên đã xuất ra những điều sau: _id: 5a7a4248550ebb9fafd898cf,firstName: "Thomas",lastName: "Anderson"

Các phương thơm thứcChúng ta rất có thể tạo ra các thủ tục tuỳ chỉnh bên trên lược trang bị với truy vấn bọn chúng trải qua mô hình chủng loại. Những phương thức này sẽ có được quyền truy vấn vào đối tượng người dùng mô hình với bọn chúng hoàn toàn có thể được sử dụng. lấy một ví dụ, bạn cũng có thể tìm tất cả những người dân có cùng tên.

Trong ví dụ này, chúng ta hãy chế tạo ra một hàm nhằm trả lại thương hiệu cho người sử dụng bây chừ. Hãy thêm một thủ tục helper tùy chỉnh cấu hình điện thoại tư vấn là getInitials vào giản đồ:

userSchema.methods.getInitials = function() return this.firstName<0> + this.lastName<0>Phương thơm pháp này đang rất có thể truy vấn thông qua một mô hình ví dụ:

let Model = new UserModel( firstName: "Thomas", lastName: "Anderson")let initials = Model.getInitials()console.log(initials) // This will output: TAPhương thơm pháp tĩnhTương trường đoản cú nlỗi các phương thức dụ, bạn có thể sản xuất các cách làm tĩnh bên trên lược trang bị. Hãy tạo thành một cách thức để đưa vớ khắp cơ thể cần sử dụng trong cửa hàng dữ liệu:

userSchema.statics.getUsers = function() return new Promise((resolve sầu, reject) => this.find((err, docs) => if(err) console.error(err) return reject(err) resolve(docs) ) )điện thoại tư vấn getUsers trên lớp Model vẫn trả lại tất toàn bộ cơ thể dùng vào cửa hàng dữ liệu:

UserModel.getUsers() .then(docs => console.log(docs) ) .catch(err => console.error(err) )Thêm dụ với phương thức tĩnh là một trong những biện pháp tiếp cận xuất sắc rất đẹp để tiến hành một đồ họa liên tưởng cơ sở dữ liệu bên trên những tủ đựng đồ cùng làm hồ sơ.MiddlewareMiddleware là những tính năng chạy sống các tiến trình rõ ràng của con đường ống dẫn. Mongoose cung ứng trung gian cho những vận động sau:

Tổng hợpTài liệuMô hìnhTruy vấnVí dụ, các mô hình gồm chức năng trước và sau tất cả nhị tđê mê số:

Loại sự kiện ("init", "validate", "save", "remove")Một Điện thoại tư vấn lại được tiến hành với vấn đề này tìm hiểu thêm ví dụ tế bào hình
*

Hãy test một ví dụ bằng phương pháp thêm hai trường được hotline là createdAt và updatedAt vào giản đồ của bọn chúng ta:

let mongoose = require("mongoose")let userSchema = new mongoose.Schema( firstName: String, lastName: String, createdAt: Date, updatedAt: Date)module.exports = mongoose.model("User", userSchema)Lúc được điện thoại tư vấn là mã sản phẩm.save sầu (), có sự kiện pre(‘save’, …) và post(‘save’, …) được kích hoạt.Hãy thêm 1 Hook trước lúc lưu lại và đặt các quý hiếm cho createdAt cùng updatedAt:

userSchema.pre("save", function (next) let now = Date.now() this.updatedAt = now // Set a value for createdAt only if it is null if (!this.createdAt) this.createdAt = now // call the next function in the pre-save chain next() )Hãy sản xuất với lưu tế bào hình:

let UserModel = require("./user")let model = new UserModel( fullName: "Thomas Anderson"msg.save() .then(doc => console.log(doc) ) .catch(err => console.error(err) )Quý khách hàng sẽ thấy các cực hiếm mang đến createdAt và updatedAt Khi phiên bản ghi được tạo ra được in:

module.exports = function timestamp(schema) // Add the two fields to the schema schema.add( createdAt: Date, updatedAt: Date ) // Create a pre-save hook schema.pre("save", function (next) let now = Date.now() this.updatedAt = now // Set a value for createdAt only if it is null if (!this.createdAt) this.createdAt = now // Hotline the next function in the pre-save sầu chain next() )Để áp dụng plugin này, công ty chúng tôi chỉ cần truyền nó cho tới các lược thiết bị cần phải hỗ trợ đến chức năng này:

let timestampPlugin = require("./plugins/timestamp")emailSchema.plugin(timestampPlugin)userSchema.plugin(timestampPlugin)

Query Building

Mongoose có một API khôn cùng phong phú và đa dạng để xử trí nhiều hoạt động phức hợp được hỗ trợ do MongoDB.

UserModel.find() // find all users .skip(100) // skip the first 100 items .limit(10) // limit lớn 10 items .sort(firstName: 1 // sort ascending by firstName .select(firstName: true // select firstName only .exec() // exexinh đẹp the query .then(docs => console.log(docs) ) .catch(err => console.error(err) )

Kết luận

Chúng ta bắt đầu chỉ tìm hiểu một vài tuấn kiệt cơ bạn dạng của Mongoose. Đây là một tlỗi viện đa dạng mẫu mã không thiếu thốn những kĩ năng bổ ích và mạnh khỏe lúc làm việc với các mô hình tài liệu trong lớp vận dụng.

quý khách có thể liên tưởng thẳng với Mongo bởi Mongo Driver, Mongoose sẽ dễ dàng hóa cửa hàng kia bằng cách có thể chấp nhận được bạn quy mô những mối quan hệ giữa dữ liệu với chứng thực bọn chúng một phương pháp dễ dàng.

Link tđắm say khao

https://www.codementor.io/theoutlander/introduction-to-mongoose-for-mongodb-gw9xw34el