Mongoose Là Gì

  -  

Mongoose là 1 trong thỏng 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ó quản lý mối quan hệ thân dữ liệu, cung cấp sự xác nhận giản trang bị với được áp dụng để dịch thân những đối tượng người dùng trong mã cùng 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à một trong cơ sở dữ liệu NoSquốc lộ. Quý Khách hoàn toàn có thể lưu trữ những JSON trong đó, cùng cấu tạo của các tư liệu này có thể biến hóa vì nó không buộc phải nlỗi các cơ sở tài liệu Squốc lộ. Đây là một Một trong những ưu thế của câu hỏi sử dụng NoSquốc lộ bởi nó tăng tốc độ trở nên tân tiến áp dụng với giảm sự tinh vi của vấn đề thực hiện.

Dưới đây là ví dụ về phong thái dữ liệu được lưu lại trong đại lý tài liệu Mongo vs. SQL:

*

Thuật ngữ - Terminologies

Collections

Collections sống Mongo tương đương cùng với những bảng trong các đại lý tài liệu quan hệ. Chúng hoàn toàn có thể chứa nhiều tư liệu JSON.

Documents

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

Fields

"Fields" nằm trong tính tựa như nlỗi những cột vào một bảng Squốc lộ.

Schema

Trong Lúc Mongo là schema-less, Squốc lộ định nghĩa một lược đồ gia dụng thông qua quan niệm bảng. Một lược đồ vật Mongoose là 1 lớp cấu tạo dữ liệu được thi hành qua lớp áp dụng.

Fields

"Models" là quy mô bậc cao bao gồm một lược đồ gia dụng với tạo nên một miêu tả của một tài liệu tương tự cùng với các phiên bản ghi vào một các đại lý tài liệu quan hệ tình dục.

Cài đặt Mongo

SchemaTrong Khi Mongo là schema-less, Squốc lộ định nghĩa một lược đồ gia dụng thông qua định nghĩa bảng. Một lược vật dụng Mongoose "là 1 trong cấu tạo dữ liệu tài liệu (hoặc bản thiết kế của tài liệu) được thi hành qua lớp ứng dụng.

Cài đặt MongoDB thích hợp mang lại Hệ điều hành và quản lý của bạn tự Website MongoDB https://docs.mongodb.com/manual/installation/ với tuân theo lý giải sở hữu đặt

Tạo ĐK các đại lý dữ liệu sandbox miễn phí trên mLabCài đặt Mongo bởi Docker nếu khách hàng thực hiện dockerHãy điều phối qua một vài vụ việc cơ phiên bản của Mongoose bằng cách triển khai mô hình tài liệu cho một sổ liên tưởng dễ dàng và đơn giản.

Cài đặt NPMChúng ta hãy vào thư mục dự án với khởi tạo thành dự án công trình của bọn chúng ta

npm init -y

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

npm install mongoose validatorLệnh mua để lên trên sẽ cài đặt phiên bạn dạng tiên tiến nhất của tlỗi viện. Cú pháp Mongoose vào bài bác báo này đặc thù đến Mongoose v5 cùng hơn thế nữa.

Kết nối cửa hàng dữ liệuTạo tệp ./src/database.js vào thư mục gốc của dự án.

Tiếp theo, bọn họ sẽ tạo thêm một một phương thức kết nối cùng với cửa hàng dữ liệu.

Kết nối đang chuyển đổi tùy thuộc vào cài đặt của doanh nghiệp.

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 yên cầu ("mongoose") trả về bên trên trả về một đối tượng người dùng Singleton. Như vậy có nghĩa là lần thứ nhất chúng ta Hotline ("mongoose"), nó tạo ra một tấm Mongoose và trả lại . Trong những cuộc Gọi tiếp theo sau, nó đã trả lại và một cá thể đã có được chế tác cùng trả lại cho mình lần trước tiên do phương pháp nhập / xuất mô-đun vào ES6.

*

Tương trường đoản cú như thế, họ sẽ chuyển lớp Thương hiệu tài liệu của họ thành một singleton bằng cách trả lại một diễn tả của lớp trong module.exports vày chúng ta chỉ cần một kết nối tuyệt nhất với cửa hàng tài liệu.

Xem thêm: Genomics Là Gì - Nghĩa Của Từ Genomic

ES6 tạo cho bọn họ thuận tiện tạo ra chủng loại singleton (ví dụ đơn) vị mô-đun hoạt động ra làm sao bằng phương pháp lưu trữ những đánh giá của một tệp tin được nhập trước đó.

Mongoose Schema vs. Model

Mongoose Model bao hàm Mongoose schema. Mongoose schema xác minh cấu trúc của tư liệu, những quý giá mang định, xác thực. trong những lúc Mongoose Mã Sản Phẩm hỗ trợ một hình ảnh cho các đại lý tài liệu nhằm tạo, truy vấn vấn, cập nhật, xoá những bản ghi.

Tạo ra một quy mô Mongoose model bao hàm chủ yếu là cha phần:

Tmê man khảo Mongooselet mongoose = require("mongoose")

Tài liệu tìm hiểu thêm này sẽ kiểu như cùng với tư liệu đã được trả về khi chúng tôi kết nối với các đại lý dữ liệu, tức là lược đồ và những khái niệm quy mô đang không cần phải kết nối một phương pháp cụ thể cùng với đại lý tài liệu.

Xác định SchemaMột giản thiết bị quan niệm tài sản gia sản thông qua một đối tượng người sử dụng nhưng mà tên khóa tương ứng cùng với thương hiệu trực thuộc tính trong bộ sưu tầm.

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

ArrayBooleanBufferDateMixed (A generic / flexible data type)NumberObjectIdStringHỗn hợp và ObjectId được tư tưởng theo tận hưởng ("mongoose") Schema.Types.

Xuất mô hìnhChúng ta hotline constructor quy mô trên Mongoose với truyền nó cho tên tủ đựng đồ với một tđam mê chiếu mang lại lược đồ dùng.

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

Chúng ta hãy kết hợp đoạn mã bên trên thành ./src/models/tin nhắn.js để xác minh văn bản của một mô hình cơ bản:

Create Record

Hãy tạo một thể hiện của mô hình tin nhắn cùng giữ nó vào các đại lý dữ liệu:

Trường _id được Mongo sinh sản tự động cùng là 1 trong khóa bao gồm của collection. Giá trị của chính nó là nhất.Giá trị của trường gmail được trả lại. Lưu ý nó là chữ in thường xuyên bởi vì thuộc tính đúng trong các giản đồ gia dụng lowercase:true __v là nằm trong tính versionKey được bỏ lên mỗi tư liệu Khi được tạo nên vì chưng Mongoose. Giá trị của nó bao hàm câu chữ tư liệu.Nếu bạn nỗ lực sản xuất tiếp cùng với dự liệu nhỏng bên trên, các bạn sẽ nhận ra một lỗi do ngôi trường gmail họ quan niệm là duy nhất.

Fetch Record

Hãy test mang lại bản ghi họ vẫn lưu lại vào cơ sở dữ liệu trước kia. Lớp quy mô cho thấy thêm một số phương thức tĩnh cùng nhằm thực hiện bên trên đại lý dữ liệu. Bây giờ chúng ta đã tìm kiếm làm hồ sơ nhưng mà chúng ta vẫn tạo ra trước kia bằng phương pháp thực hiện phương pháp tìm kiếm với gửi email dưới dạng các tự tra cứu kiếm.

Hãy tạo ra một giản vật người tiêu 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ố ở trong tính ảo ko tuyệt nhất thiết nên là mãi sau vào đại lý dữ liệu. Chúng ta hoàn toàn có thể thêm nó vào giản trang bị của chúng ta nlỗi một người giúp đỡ để có được với tùy chỉnh thiết lập các cực hiếm.

Hãy tạo ra một nằm trong tính ảo Gọi là fullName hoàn toàn có thể được thực hiện để tại vị những quý giá bên trên firstName và lastName và đem bọn chúng nlỗi một cực hiếm phối 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<0> this.lastName = str<1>)hotline lại để thừa nhận cùng đặt nên thực hiện keywords tác dụng bởi họ phải truy cập vào mô hình trải qua trường đoản cú khóa này. Sử dụng công dụng mũi thương hiệu chất Khủng sẽ thay đổi điều này đề cùa đến.

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

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

Các phương thứcChúng ta có thể tạo nên những phương thức tuỳ chỉnh bên trên lược đồ gia dụng và truy vấn bọn chúng thông qua quy mô mẫu. Những phương thức này sẽ sở hữu quyền truy cập vào đối tượng người sử dụng quy mô với chúng rất có thể được áp dụng. lấy ví dụ như, bạn cũng có thể kiếm tìm toàn bộ những người tất cả thuộc thương hiệu.

Trong ví dụ này, họ hãy tạo ra một hàm để trả lại tên cho người dùng hiện giờ. Hãy thêm một cách làm helper cấu hình thiết lập hotline 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 vẫn hoàn toàn có thể truy vấn thông sang 1 mô hình ví dụ:

let mã sản phẩm = new UserModel( firstName: "Thomas", lastName: "Anderson")let initials = model.getInitials()console.log(initials) // This will output: TAPmùi hương pháp tĩnhTương trường đoản cú như những thủ tục dụ, bạn có thể tạo những cách tiến hành tĩnh trên lược thiết bị. Hãy tạo nên một phương pháp để lấy vớ từ đầu đến chân cần sử dụng vào cửa hàng dữ 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) ) )Hotline getUsers bên trên lớp Model đang trả lại vớ khắp cơ thể dùng trong đại lý dữ liệu:

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

Tổng hợpTài liệuMô hìnhTruy vấnlấy một ví dụ, các quy mô có chức năng trước với sau có hai tsay mê số:

Loại sự kiện ("init", "validate", "save", "remove")Một hotline lại được triển khai cùng với điều này tham khảo ví dụ tế bào hình
*

Hãy test một ví dụ bằng phương pháp thêm nhì ngôi trường được Gọi là createdAt và updatedAt vào giản vật dụng 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)khi được Call là Model.save (), gồm 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 cùng đặt các giá trị 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 // Gọi the next function in the pre-save sầu chain next() )Hãy sản xuất và giữ 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 vẫn thấy những giá trị mang lại createdAt cùng updatedAt Lúc 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 sầu 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 // Call the next function in the pre-save chain next() )Để sử dụng plugin này, Shop chúng tôi chỉ việc truyền nó cho tới những lược thứ cần phải cung ứng cho tính năng này:

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

Query Building

Mongoose gồm một API rất đa dạng nhằm xử trí những hoạt động tinh vi được cung cấp vì MongoDB.

UserModel.find() // find all users .skip(100) // skip the first 100 items .limit(10) // limit to lớn 10 items .sort(firstName: 1 // sort ascending by firstName .select(firstName: true // select firstName only .exec() // exeđáng yêu the query .then(docs => console.log(docs) ) .catch(err => console.error(err) )

Kết luận

Chúng ta mới chỉ khám phá một vài nhân kiệt cơ bản của Mongoose. Đây là một thỏng viện phong phú vừa đủ những anh tài có ích và trẻ khỏe lúc làm việc cùng với những quy mô dữ liệu trong lớp ứng dụng.

Xem thêm: Cùng Tìm Hiểu Hook Là Gì Và Một Số Hàm Cơ Bản Của Hook Trong Reactjs

quý khách rất có thể ảnh hưởng trực tiếp cùng với Mongo bởi Mongo Driver, Mongoose sẽ đơn giản và dễ dàng hóa shop đó bằng cách có thể chấp nhận được chúng ta quy mô các quan hệ thân dữ liệu và xác thực chúng một bí quyết dễ dãi.

Link tsay mê khao

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