Hướng dẫn mongoose nodejs
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. MongoDB là một cơ sở dữ liệu NoSQL. Bạn có thể lưu trữ các JSON trong đó, và cấu trúc của các tài liệu này có thể thay đổi vì nó không bắt buộc như các cơ sở dữ 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 tốc độ phát triển ứng dụng và giảm sự phức tạp của việc triển khai. 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: Thuật ngữ - Terminologies Collections Collections ở Mongo tương đương với các bảng trong các cơ sở dữ liệu quan hệ. Chúng có thể chứa nhiều tài liệu JSON. Documents 'Documents' tương đương với các bản ghi trong SQL. Mặc dù một dòng SQL có thể tham khảo dữ liệu trong các bảng khác, các tài liệu Mongo thường kết hợp trong một tài liệu. Fields 'Fields' thuộc tính tương tự như các cột trong một bảng SQL. Schema Trong khi Mongo là schema-less, SQL định nghĩa một lược đồ thông qua định nghĩa bảng. Một lược đồ Mongoose là một lớp cấu trúc dữ liệu được thi hành qua lớp ứng dụng. Fields 'Models' là mô hình bậc cao có một lược đồ và tạo ra một thể hiện của một tài liệu tương đương với các bản ghi trong một cơ sở dữ liệu quan hệ. Cài đặt Mongo Schema Trong khi Mongo là schema-less, SQL định nghĩa một lược đồ thông qua định nghĩa bảng. Một lược đồ Mongoose 'là một cấu trúc dữ 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ệ điều hành của bạn từ Website MongoDB https://docs.mongodb.com/manual/installation/ và làm theo hướng dẫn cài đặt
Cài đặt NPM Chúng ta hãy vào thư mục dự án và khởi tạo dự án của chúng ta
Cài đặt Mongoose và một thư viện xác nhận với lệnh sau:
Lệnh cài đặt trên sẽ cài đặt 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ệu Tạo tệp Tiếp theo, chúng ta sẽ tạo thêm một một phương thức kết nối với cơ sở dữ liệu. Kết nối sẽ thay đổi tùy theo cài đặt của bạn.
Lệnh yêu cầu ('mongoose') trả về phía trên trả về một đối tượng Singleton. Điều này có nghĩa là lần đầu tiên bạn gọi ("mongoose"), nó tạo ra một lớp Mongoose và trả lại . Trong các cuộc gọi tiếp theo, nó sẽ trả lại cùng một cá thể đã được tạo và trả lại cho bạn lần đầu tiên vì cách nhập / xuất mô-đun trong ES6. Tương tự như vậy, chúng ta đã chuyển lớp Cơ sở dữ liệu của chúng ta thành một singleton bằng cách trả lại một thể hiện của lớp trong module.exports vì chúng ta chỉ cần một kết nối duy nhất với cơ sở dữ 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. ModelMongoose model bao gồm Mongoose schema. Mongoose schema xác định cấu trúc của tài liệu, các giá trị mặc định, xác nhận. trong khi Mongoose model cung cấp một giao diện cho cơ sở dữ liệu để tạo, truy vấn, cập nhật, xoá các bản ghi. Tạo ra một mô hình Mongoose model bao gồm chủ yếu là ba phần:
Tài liệu tham khảo này sẽ giống với tài liệu đã được trả về khi chúng tôi kết nối với cơ sở dữ liệu, có nghĩa là lược đồ và các định nghĩa mô hình sẽ không cần phải kết nối một cách rõ ràng với cơ sở dữ liệu.
Ở đây chúng tôi định nghĩa một thuộc tính được gọi là email với một kiểu lược đồ String ánh xạ tới một trình xác nhận nội bộ sẽ được kích hoạt khi mô hình được lưu vào cơ sở dữ liệu. Nó sẽ thất bại nếu kiểu dữ liệu của giá trị không phải là một kiểu chuỗi. Các Loại schena sau được cho phép:
Hỗn hợp và ObjectId được định nghĩa theo yêu cầu ('mongoose') Schema.Types.
Chúng ta hãy kết hợp đoạn mã trên thành
Định nghĩa lược đồ phải đơn giản, nhưng tính phức tạp của nó thường dựa trên yêu cầu ứng dụng. Các lược đồ có thể được sử dụng lại và chúng cũng có thể chứa một số sơ đồ con. Trong ví dụ trên, giá trị của thuộc tính email là một loại giá trị đơn giản. Tuy nhiên, nó cũng có thể là một loại đối tượng với các thuộc tính bổ sung trên đó. Chúng ta có thể tạo ra một thể hiện của mô hình chúng ta đã định nghĩa ở trên và điền nó bằng cách sử dụng cú pháp sau:
Hãy nâng cao lược đồ Email để làm cho thuộc tính email là một trường bắt buộc, và chuyển đổi giá trị sang chữ thường trước khi lưu nó. Chúng tôi cũng có thể thêm một chức năng xác nhận rằng sẽ đảm bảo rằng giá trị là một địa chỉ email hợp lệ. Chúng tôi sẽ tham khảo và sử dụng thư viện trình duyệt đã được cài đặt trước đó.
Hoạt động cơ bản Mongoose có một API linh hoạt và cung cấp nhiều cách để hoàn thành một nhiệm vụ. Chúng tôi sẽ không tập trung vào phần này vì nó nằm ngoài phạm vi của bài viết, nhưng hãy nhớ rằng hầu hết các hoạt động có thể được thực hiện theo nhiều cách bằng cú pháp khác nhau hoặc thông qua kiến trúc ứng dụng. Create RecordHãy tạo một thể hiện của mô hình email và lưu nó vào cơ sở dữ liệu:
Kết quả được trả lại khi lưu thành công:
Các trường sau được trả về (Trường nội bộ được đặt trước bằng dấu gạch dưới "_").
Nếu bạn cố gắng 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 chúng ta định nghĩa là duy nhất. Fetch RecordHãy thử lấy lại bản ghi chúng ta đã lưu vào cơ sở dữ liệu trước đó. Lớp mô hình cho thấy một số phương pháp tĩnh và để thực hiện trên cơ sở dữ liệu. Bây giờ chúng ta sẽ tìm kiếm hồ sơ mà chúng ta đã tạo ra trước đó bằng cách sử dụng phương pháp tìm và gửi email dưới dạng cụm từ tìm kiếm.
Tài liệu được trả về sẽ giống như những gì được hiển thị khi chúng tôi tạo bản ghi:
Cập nhật Bản ghi Hãy sửa đổi bản ghi ở trên bằng cách thay đổi địa chỉ email và thêm một trường vào nó, tất cả trong một thao tác đơn lẻ. Vì lý do hiệu suất, Mongoose sẽ không trả lại tài liệu đã cập nhật nên chúng ta cần phải thông qua một tham số bổ sung để yêu cầu nó:
Tài liệu trả về sẽ chứa email đã cập nhật:
Xóa hồ sơ Chúng tôi sẽ sử dụng lệnh findOneAndRemove để xóa một bản ghi. Nó trả về các tài liệu ban đầu đã được gỡ bỏ:
Người trợ giúp Chúng tôi đã xem xét một số chức năng cơ bản được biết đến như các hoạt động CRUD (Tạo, Đọc, Cập nhật, Xoá), nhưng Mongoose cũng cung cấp khả năng định cấu hình một số loại phương thức trợ giúp và thuộc tính. Chúng có thể được sử dụng để đơn giản hóa việc làm việc với dữ liệu. Hãy tạo một giản đồ người dùng trong /src/models/user.js với fieldsfirstName và lastName:
Virtual Property Một số thuộc tính ảo không nhất thiết phải là tồn tại trong cơ sở dữ liệu. Chúng ta có thể thêm nó vào giản đồ của chúng ta như một người giúp đỡ để có được và thiết lập các giá trị. Hãy tạo một thuộc tính ảo gọi là fullName có thể được sử dụng để đặt các giá trị trên firstName và lastName và lấy chúng như một giá trị kết hợp khi đọc:
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ờ, chúng ta có thể đặt firstName và lastName bằng cách gán một giá trị cho fullName:
Đoạn mã trên sẽ xuất ra những điều sau: { _id: 5a7a4248550ebb9fafd898cf, firstName: 'Thomas', lastName: 'Anderson' } Các phương thức Chúng ta có thể tạo ra các phương thức tuỳ chỉnh trên lược đồ và truy cập chúng thông qua mô hình mẫu. Những phương pháp này sẽ có quyền truy cập vào đối tượng mô hình và chúng có thể được sử dụng. Ví dụ, chúng ta có thể tìm tất cả những người có cùng tên. Trong ví dụ này, 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 thức helper tùy chỉnh gọi là getInitials vào giản đồ:
Phương pháp này sẽ có thể truy cập thông qua một mô hình ví dụ:
Phương pháp tĩnh Tương tự như các phương thức dụ, chúng ta có thể tạo các phương thức tĩnh trên lược đồ. Hãy tạo ra một phương pháp để lấy tất cả người dùng trong cơ sở dữ liệu:
Gọi getUsers trên lớp Model sẽ trả lại tất cả người dùng trong cơ sở dữ liệu:
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ơ. Middleware Middleware 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: Tổng hợp Tài liệu Mô hình Truy vấn Ví dụ, các mô hình có chức năng trước và sau có hai tham số:
Hãy thử một ví dụ bằng cách thêm hai trường được gọi là createdAt và updatedAt vào giản đồ của chúng ta:
Khi được gọi là model.save (), có sự kiện
Hãy tạo và lưu mô hình:
Bạn sẽ thấy các giá trị cho createdAt và updatedAt khi bản ghi được tạo ra được in:
Giả sử chúng ta muốn theo dõi khi một bản ghi được tạo ra và cập nhật lần cuối trên mỗi bộ sưu tập trong cơ sở dữ liệu của chúng tôi. Thay vì lặp lại quá trình trên, chúng ta có thể tạo một plugin và áp dụng nó cho mọi schema. Hãy tạo tệp ./src/model/plugins/timestamp.js và nhân bản lại chức năng trên dưới dạng mô-đun có thể sử dụng lại được:
Để sử dụng plugin này, chúng tôi chỉ cần truyền nó tới các lược đồ cần được cung cấp cho chức năng này:
Query BuildingMongoose có một API rất phong phú để xử lý nhiều hoạt động phức tạp được hỗ trợ bởi MongoDB.
Kết luậnChúng ta mới chỉ khám phá một số tính năng cơ bản của Mongoose. Đây là một thư viện phong phú đầy đủ các tính năng hữu ích và mạnh mẽ khi làm việc với các mô hình dữ liệu trong lớp ứng dụng. Bạn có thể tương tác trực tiếp với Mongo bằng Mongo Driver, Mongoose sẽ đơn giản hóa tương tác đó bằng cách cho phép bạn mô hình các mối quan hệ giữa dữ liệu và xác nhận chúng một cách dễ dàng. Link tham khao https://www.codementor.io/theoutlander/introduction-to-mongoose-for-mongodb-gw9xw34el http://mongoosejs.com/ https://www.mongodb.com/ |