Hướng dẫn is mongodb and mongoose the same? - mongodb và mongoose có giống nhau không?
Trong bài viết này, chúng tôi sẽ khám phá Thư viện Mongoose cho MongoDB. Mongoose là thư viện mô hình dữ liệu đối tượng (ODM) cho MongoDB được phân phối dưới dạng gói NPM. Chúng tôi sẽ so sánh và đối chiếu Mongoose với việc sử dụng trình điều khiển MongoDB Node.js gốc cùng với xác thực lược đồ mongDB.Mongoose library for MongoDB. Mongoose is a Object Data Modeling (ODM) library for MongoDB distributed as an npm package. We'll compare and contrast Mongoose to using the native MongoDB Node.js driver together with MongoDB Schema Validation. Chúng tôi sẽ thấy cách xác thực lược đồ MongoDB giúp chúng tôi thực thi lược đồ cơ sở dữ liệu, trong khi vẫn cho phép linh hoạt tuyệt vời khi cần thiết. Cuối cùng, chúng tôi sẽ xem liệu các tính năng bổ sung mà Mongoose cung cấp có đáng để giới thiệu thư viện của bên thứ ba vào các ứng dụng của chúng tôi không. Mongoose là gì?Mongoose là thư viện mô hình dữ liệu đối tượng dựa trên Node.js (ODM) cho MongoDB. Nó giống như một bản đồ quan hệ đối tượng (ORM) như SQLalchemy cho cơ sở dữ liệu SQL truyền thống. Vấn đề mà Mongoose nhằm mục đích giải quyết là cho phép các nhà phát triển thực thi một lược đồ cụ thể ở lớp ứng dụng. Ngoài việc thực thi một lược đồ, Mongoose còn cung cấp nhiều loại móc, xác nhận mô hình và các tính năng khác nhằm mục đích giúp việc làm việc với MongoDB dễ dàng hơn.SQLAlchemy for traditional SQL databases. The problem that Mongoose aims to solve is allowing developers to enforce a specific schema at the application layer. In addition to enforcing a schema, Mongoose also offers a variety of hooks, model validation, and other features aimed at making it easier to work with MongoDB. Xác thực lược đồ mongoDB là gì?Xác thực lược đồ mongDB cho phép dễ dàng thực thi lược đồ chống lại cơ sở dữ liệu MongoDB của bạn, trong khi vẫn duy trì mức độ linh hoạt cao, mang lại cho bạn những điều tốt nhất của cả hai thế giới. Trong quá khứ, cách duy nhất để thực thi lược đồ chống lại bộ sưu tập MongoDB là thực hiện nó ở cấp độ ứng dụng bằng cách sử dụng ODM như Mongoose, nhưng điều đó đặt ra những thách thức đáng kể cho các nhà phát triển. makes it possible to easily enforce a schema against your MongoDB database, while maintaining a high degree of flexibility, giving you the best of both worlds. In the past, the only way to enforce a schema against a MongoDB collection was to do it at the application level using an ODM like Mongoose, but that posed significant challenges for developers. Bắt đầuNếu bạn muốn làm theo cùng với hướng dẫn này và chơi xung quanh với các xác nhận lược đồ nhưng không có phiên bản MongoDB được thiết lập, bạn có thể thiết lập một cụm Atlas MongoDB miễn phí tại đây.free MongoDB Atlas cluster here. Mô hình dữ liệu đối tượng trong MongoDBMột lợi ích rất lớn của việc sử dụng cơ sở dữ liệu NoQuery như MongoDB là bạn không bị hạn chế với mô hình dữ liệu cứng nhắc. Bạn có thể thêm hoặc xóa các trường, dữ liệu tổ sâu nhiều lớp và có mô hình dữ liệu thực sự linh hoạt đáp ứng nhu cầu của bạn ngày hôm nay và có thể thích ứng với nhu cầu luôn thay đổi của bạn vào ngày mai. Nhưng quá linh hoạt cũng có thể là một thách thức. Nếu không có sự đồng thuận về mô hình dữ liệu sẽ trông như thế nào và mọi tài liệu trong một bộ sưu tập đều chứa các trường rất khác nhau, bạn sẽ có một thời gian tồi tệ. Lược đồ và mô hình MongooseỞ một đầu của quang phổ, chúng ta có ODM giống như Mongoose, từ Get-Go buộc chúng ta vào một lược đồ bán cứng. & NBSP; Cơ sở dữ liệu MongoDB. Đối tượng Ví dụ: giả sử chúng tôi đang xây dựng một blog và muốn đại diện cho một bài đăng trên blog. Trước tiên chúng tôi sẽ xác định một lược đồ và sau đó tạo một mô hình Mongoose đi kèm: Thực hiện các hoạt động trên MongoDB với MongooseKhi chúng tôi có một mô hình Mongoose được xác định, chúng tôi có thể chạy các truy vấn để tìm nạp, cập nhật và xóa dữ liệu đối với bộ sưu tập MongoDB mà AlignSwith mô hình Mongoose. Với mô hình trên, chúng ta có thể làm những việc như: Trình điều khiển của MongoDB MongoDB Node.js: Một so sánhLợi ích của việc sử dụng Mongoose là chúng tôi có một lược đồ để chống lại mã ứng dụng của chúng tôi và mối quan hệ rõ ràng giữa các tài liệu MongoDB của chúng tôi và các mô hình Mongoose trong ứng dụng của chúng tôi. Nhược điểm là chúng tôi chỉ có thể tạo các bài đăng trên blog và họ phải tuân theo lược đồ được xác định ở trên. Nếu chúng ta thay đổi lược đồ Mongoose, chúng ta đang thay đổi hoàn toàn mối quan hệ và nếu bạn đang trải qua sự phát triển nhanh chóng, điều này có thể làm bạn chậm lại rất nhiều. Nhược điểm khác là mối quan hệ này giữa lược đồ và mô hình chỉ tồn tại trong giới hạn của ứng dụng Node.js của chúng tôi. Cơ sở dữ liệu MongoDB của chúng tôi không nhận thức được mối quan hệ, nó chỉ chèn hoặc lấy dữ liệu mà nó được yêu cầu mà không có bất kỳ loại xác thực nào. Trong trường hợp chúng tôi sử dụng một ngôn ngữ lập trình khác nhau để tương tác với cơ sở dữ liệu của chúng tôi, tất cả các ràng buộc và mô hình mà chúng tôi xác định trong Mongoose sẽ là vô giá trị. Mặt khác, nếu chúng tôi quyết định chỉ sử dụng trình điều khiển MongoDB Node.js, chúng tôi có thể chạy các truy vấn chống lại bất kỳ bộ sưu tập nào trong cơ sở dữ liệu của chúng tôi hoặc tạo các bộ phận mới một cách nhanh chóng. Trình điều khiển MongoDB Node.js không có khái niệm về mô hình hoặc ánh xạ dữ liệu đối tượng.MongoDB Node.js driver, we could run queries against any collection in our database, or create new ones on the fly. The MongoDB Node.js driver does not have concepts of object data modeling or mapping. Chúng tôi chỉ cần viết các truy vấn dựa trên cơ sở dữ liệu và bộ sưu tập mà chúng tôi muốn làm việc để hoàn thành các mục tiêu kinh doanh. Nếu chúng tôi muốn chèn một bài đăng trên blog mới trong bộ sưu tập của mình, chúng tôi chỉ có thể thực hiện một lệnh như vậy: Hoạt động Chỉ vì trình điều khiển Node.js không có khái niệm về mô hình, không có nghĩa là chúng tôi không thể tạo các mô hình để biểu diễn dữ liệu MongoDB của chúng tôi ở cấp độ ứng dụng. Chúng ta có thể dễ dàng tạo một mô hình chung hoặc sử dụng thư viện như ObjectModel. Chúng tôi có thể tạo một mô hình Sau đó, chúng tôi có thể sử dụng mô hình này kết hợp với trình điều khiển MongoDB Node.js của chúng tôi, cho chúng tôi cả sự linh hoạt của việc sử dụng mô hình, nhưng không bị hạn chế bởi nó. Trong kịch bản này, cơ sở dữ liệu MongoDB của chúng tôi vẫn không biết về mô hình blog của chúng tôi ở cấp độ ứng dụng, nhưng các nhà phát triển của chúng tôi có thể làm việc với nó, thêm các phương thức và trợ giúp cụ thể vào mô hình và sẽ biết rằng mô hình này chỉ được sử dụng trong giới hạn của ứng dụng Node.js của chúng tôi. Tiếp theo, hãy khám phá xác thực lược đồ. Thêm xác thực lược đồChúng ta có thể chọn giữa hai cách khác nhau để thêm xác thực lược đồ vào các bộ sưu tập MongoDB của chúng tôi. Đầu tiên là sử dụng trình xác nhận cấp ứng dụng, được xác định trong các lược đồ Mongoose. Thứ hai là sử dụng xác thực lược đồ MongoDB, được định nghĩa trong chính bộ sưu tập MongoDB. Sự khác biệt rất lớn là xác thực lược đồ MongoDB bản địa được áp dụng ở cấp cơ sở dữ liệu. Hãy xem tại sao điều đó quan trọng bằng cách khám phá cả hai phương pháp. Xác nhận lược đồ với MongooseKhi nói đến xác thực lược đồ, Mongoose thực thi nó ở lớp ứng dụng như chúng ta đã thấy trong phần trước. Nó làm điều này theo hai cách. Đầu tiên, bằng cách xác định mô hình của chúng tôi, chúng tôi đang nói rõ ràng ứng dụng Node.js của chúng tôi những trường và loại dữ liệu chúng tôi sẽ cho phép được chèn vào một bộ sưu tập cụ thể. Ví dụ: lược đồ blog Mongoose của chúng tôi xác định thuộc tính Thứ hai, chúng tôi xác nhận thêm rằng dữ liệu trong các trường được xác định phù hợp với tập hợp các tiêu chí được xác định của chúng tôi. Ví dụ: chúng tôi có thể mở rộng trên mô hình blog của mình bằng cách thêm trình xác nhận cụ thể như yêu cầu một số trường nhất định, đảm bảo độ dài tối thiểu hoặc tối đa cho một trường cụ thể hoặc đưa ra logic tùy chỉnh của chúng tôi. Hãy xem nó trông như thế nào với Mongoose. Trong mã của chúng tôi, chúng tôi chỉ cần mở rộng trên tài sản và thêm trình xác nhận của chúng tôi: Mongoose chăm sóc định nghĩa mô hình và xác nhận lược đồ trong một cú đánh rơi. Nhược điểm mặc dù vẫn giống nhau. Các quy tắc này chỉ áp dụng ở lớp ứng dụng và mongDB không phải là người khôn ngoan hơn. Bản thân trình điều khiển MongoDB Node.js không có cơ chế để chèn hoặc quản lý xác nhận, và nó không nên. Chúng tôi có thể xác định các quy tắc xác nhận lược đồ cho cơ sở dữ liệu MongoDB của chúng tôi bằng cách sử dụng vỏ MongoDB hoặc & NBSP; la bàn.MongoDB Shell or Compass. Chúng tôi có thể tạo xác thực lược đồ khi tạo bộ sưu tập của chúng tôi hoặc sau khi thực tế trên một bộ sưu tập hiện có. Vì chúng tôi đã làm việc với ý tưởng blog này làm ví dụ, chúng tôi sẽ thêm xác nhận lược đồ của chúng tôi vào nó. Tôi sẽ sử dụng Compass và MongoDB Atlas. Để biết tài nguyên tuyệt vời về cách thêm xác nhận lược đồ, hãy xem loạt bài này.MongoDB Atlas. For a great resource on how to programmatically add schema validations, check out this series. Nếu bạn muốn làm theo cùng với hướng dẫn này và chơi xung quanh với các xác nhận lược đồ nhưng không có phiên bản MongoDB được thiết lập, bạn có thể thiết lập một cụm Atlas MongoDB miễn phí tại đây.free MongoDB Atlas cluster here. Tạo một bộ sưu tập có tên Bây giờ, trong UI la bàn, tôi sẽ điều hướng đến tab xác thực. Đúng như dự đoán, hiện tại không có quy tắc xác thực nào, có nghĩa là cơ sở dữ liệu của chúng tôi sẽ chấp nhận bất kỳ tài liệu nào miễn là nó là BSON hợp lệ. Nhấn nút Thêm quy tắc và bạn sẽ thấy giao diện người dùng để tạo quy tắc xác thực của riêng bạn.Validation tab. As expected, there are currently no validation rules in place, meaning our database will accept any document as long as it is valid BSON. Hit the Add a Rule button and you'll see a user interface for creating your own validation rules. Lược đồ tài liệu hợp lệTheo mặc định, không có quy tắc, vì vậy bất kỳ tài liệu nào sẽ được đánh dấu là truyền. Hãy thêm một quy tắc để yêu cầu thuộc tính Bây giờ chúng ta sẽ thấy rằng bài đăng ban đầu của chúng ta, không có trường Chúng tôi có thể đi xa hơn và thêm xác nhận vào các trường cá nhân là tốt. Nói với mục đích SEO, chúng tôi muốn tất cả các tiêu đề của các bài đăng trên blog là tối thiểu 20 ký tự và có độ dài tối đa 80 ký tự. Chúng ta có thể đại diện cho điều đó như thế này: Bây giờ nếu chúng tôi cố gắng chèn một tài liệu vào bộ sưu tập Có nhiều quy tắc và xác nhận bạn có thể thêm. Kiểm tra danh sách đầy đủ ở đây. Để có cách tiếp cận hướng dẫn nâng cao hơn, hãy xem các bài viết về xác thực lược đồ với các mảng và phụ thuộc.here. For a more advanced guided approach, check out the articles on schema validation with arrays and dependencies.
Mở rộng xác thực lược đồVới Mongoose, mô hình dữ liệu và lược đồ của chúng tôi là cơ sở cho các tương tác của chúng tôi với MongoDB. Bản thân MongoDB không nhận thức được bất kỳ ràng buộc nào trong số này, Mongoose đảm nhận vai trò Thẩm phán, Jury và Người hành quyết về những câu hỏi nào có thể được thực thi và những gì xảy ra với họ. Nhưng với xác thực lược đồ bản địa MongoDB, chúng tôi có thêm tính linh hoạt. Khi chúng tôi thực hiện một lược đồ, xác thực trên các tài liệu hiện có không tự động xảy ra. Xác thực chỉ được thực hiện trên các bản cập nhật và chèn. Nếu chúng tôi muốn để các tài liệu hiện có một mình, chúng tôi có thể thay đổi Ngoài ra, với các xác nhận lược đồ được thực hiện ở cấp cơ sở dữ liệu MongoDB, chúng ta có thể chọn vẫn chèn các tài liệu không xác thực. Tùy chọn Và cuối cùng, nếu chúng tôi cần, chúng tôi có thể bỏ qua xác thực tài liệu hoàn toàn bằng cách chuyển tùy chọn ... Chúng tôi sẽ gặp một lỗi khi nói rằng xác thực tài liệu không thành công. Nhưng nếu chúng tôi muốn bỏ qua xác thực tài liệu cho phần chèn này, chúng tôi chỉ đơn giản là làm điều này: Điều này sẽ không thể thực hiện được với Mongoose. Xác thực lược đồ mongDB phù hợp hơn với toàn bộ triết lý của MongoDB, nơi tập trung vào một lược đồ thiết kế linh hoạt nhanh chóng và dễ dàng thích ứng với các trường hợp sử dụng của bạn. Dân cư và tra cứuKhu vực cuối cùng mà tôi muốn so sánh Mongoose và Trình điều khiển Node.js MongoDB là sự hỗ trợ của nó cho giả pseudo. Cả Mongoose và Trình điều khiển Node.JS gốc đều hỗ trợ khả năng kết hợp các tài liệu từ nhiều bộ sưu tập trong cùng một cơ sở dữ liệu, tương tự như tham gia vào cơ sở dữ liệu quan hệ truyền thống. Cách tiếp cận Mongoose được gọi là dân cư. Nó cho phép các nhà phát triển tạo các mô hình dữ liệu có thể tham chiếu lẫn nhau và sau đó, với API đơn giản, yêu cầu dữ liệu từ nhiều bộ sưu tập. Ví dụ của chúng tôi, chúng ta hãy mở rộng trên bài đăng trên blog và thêm một bộ sưu tập mới cho người dùng.Populate. It allows developers to create data models that can reference each other and then, with a simple API, request data from multiple collections. For our example, let's expand on the blog post and add a new collection for users. Những gì chúng tôi đã làm ở trên là chúng tôi đã tạo ra một mô hình và lược đồ mới để đại diện cho người dùng để lại nhận xét trên các bài đăng trên blog. Khi người dùng để lại nhận xét, thay vì lưu trữ thông tin về chúng, chúng tôi sẽ chỉ lưu trữ người dùng đó ____ ____22. Vì vậy, một hoạt động cập nhật để thêm một nhận xét mới vào bài đăng của chúng tôi có thể trông giống như sau: Điều này giả định rằng chúng tôi có một người dùng trong bộ sưu tập Dân sự kết hợp với mô hình dữ liệu Mongoose có thể rất mạnh mẽ, đặc biệt nếu bạn đến từ nền tảng cơ sở dữ liệu quan hệ. Hạn chế là số lượng ma thuật đang diễn ra dưới mui xe để thực hiện điều này. Mongoose sẽ thực hiện hai truy vấn riêng biệt để hoàn thành nhiệm vụ này và nếu bạn tham gia nhiều bộ sưu tập, các hoạt động có thể nhanh chóng chậm lại. Vấn đề khác là khái niệm dân cư chỉ tồn tại ở lớp ứng dụng. Vì vậy, trong khi điều này hoạt động, dựa vào nó cho quản lý cơ sở dữ liệu của bạn có thể quay lại để cắn bạn trong tương lai. MongoDB kể từ phiên bản 3.2 đã giới thiệu một hoạt động mới có tên Chúng tôi có thể tạo thêm một bước bổ sung trong đường ống tổng hợp của mình để thay thế thông tin người dùng trong trường Suy nghĩ cuối cùng: Tôi có thực sự cần Mongoose không?Cả Mongoose và Trình điều khiển MongoDB Node.js đều hỗ trợ chức năng tương tự. Mặc dù Mongoose làm cho sự phát triển MongoDB quen thuộc với một người có thể hoàn toàn mới, nhưng nó thực hiện rất nhiều phép thuật dưới mui xe có thể gây ra hậu quả ngoài ý muốn trong tương lai. Cá nhân tôi tin rằng bạn không cần ODM để thành công với MongoDB. Tôi cũng không phải là một fan hâm mộ lớn của Orms trong thế giới cơ sở dữ liệu quan hệ. Trong khi họ làm cho ban đầu đi sâu vào một công nghệ cảm thấy quen thuộc, họ trừu tượng hóa rất nhiều sức mạnh của cơ sở dữ liệu. Các nhà phát triển có rất nhiều sự lựa chọn để thực hiện khi nói đến việc xây dựng các ứng dụng. Trong bài viết này, chúng tôi đã xem xét sự khác biệt giữa việc sử dụng ODM so với trình điều khiển bản địa và cho thấy rằng sự khác biệt giữa hai người không lớn. Sử dụng ODM như Mongoose có thể làm cho sự phát triển cảm thấy quen thuộc nhưng buộc bạn phải thiết kế cứng nhắc, đó là một loại chống lại khi xem xét việc xây dựng với MongoDB. Trình điều khiển MongoDB Node.js hoạt động tự nhiên với cơ sở dữ liệu MongoDB của bạn để cung cấp cho bạn trải nghiệm phát triển tốt nhất và linh hoạt nhất. Nó cho phép cơ sở dữ liệu thực hiện những gì tốt nhất trong khi cho phép ứng dụng của bạn tập trung vào những gì tốt nhất và đó có thể không quản lý các mô hình dữ liệu. Tôi nên sử dụng Mongoose hay MongoDB?Mongoose không phải là thư viện ODM duy nhất, có HAPIJS/Joi, MongoDB Schemas, v.v. và trong khi Mongoose tốt, đặc biệt là trong các lĩnh vực suy luận các loại dữ liệu, chúng ta nên chọn sử dụng xác thực lược đồ MongoDB để xác thực lược đồ.
Mongoose có cần thiết cho MongoDB không?Mongoose là lớp mô hình tài liệu đối tượng (ODM) nằm trên đầu trình điều khiển MongoDB của nút.Nếu bạn đến từ SQL, nó tương tự như ORM cho cơ sở dữ liệu quan hệ.Mặc dù không bắt buộc phải sử dụng Mongoose với Mongo, nhưng đây là bốn lý do tại sao sử dụng Mongoose với MongoDB nói chung là một ý tưởng tốt.it's not required to use Mongoose with the Mongo, here are four reasons why using Mongoose with MongoDB is generally a good idea. |