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 đầu

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.

Mô hình dữ liệu đối tượng trong MongoDB

Mộ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 Schema xác định cấu trúc của các tài liệu trong bộ sưu tập của bạn. Sau đó, bạn cần tạo một đối tượng Model ra khỏi lược đồ. Mô hình được sử dụng để tương tác với bộ sưu tập.Schema object in your application code that maps to a collection in your MongoDB database. The Schema object defines the structure of the documents in your collection. Then, you need to create a Model object out of the schema. The model is used to interact with the collection.

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:

Hướng dẫn is mongodb and mongoose the same? - mongodb và mongoose có giống nhau không?

Thực hiện các hoạt động trên MongoDB với Mongoose

Khi 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ánh

Lợ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 insertOne() này sẽ chỉ chạy tốt bằng trình điều khiển Node.js. Nếu chúng tôi cố gắng lưu dữ liệu này bằng mô hình Mongoose Blog của chúng tôi, nó sẽ thất bại, bởi vì chúng tôi không có thuộc tính author được xác định trong mô hình blog của chúng tôi.insertOne() operation would run just fine using the Node.js Driver. If we tried to save this data using our Mongoose Blog model, it would fail, because we don't have an author property defined in our Blog Mongoose model.

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 Blog như vậy:objectmodel. We could create a Blog model like so:

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 Mongoose

Khi 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 title của loại String. Nếu chúng tôi cố gắng và chèn một bài đăng trên blog với một tài sản title là một mảng, nó sẽ thất bại. Bất cứ điều gì bên ngoài các trường xác định, cũng sẽ không được chèn vào cơ sở dữ liệu.title property of type String. If we were to try and insert a blog post with a title property that was an array, it would fail. Anything outside of the defined fields, will also not be inserted in the database.

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 Schema0 và hãy chèn hai tài liệu của chúng tôi mà chúng tôi đã làm việc. Các tài liệu là:Schema0 and let's insert our two documents that we've been working with. The documents are:

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.

Hướng dẫn is mongodb and mongoose the same? - mongodb và mongoose có giống nhau không?
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 author. Nó sẽ trông giống thế này:author property. It will look like this:

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 author đã không xác thực, trong khi bài đăng có trường author là tốt để đi.author field has failed validation, while the post that does have the author field is good to go.

Hướng dẫn is mongodb and mongoose the same? - mongodb và mongoose có giống nhau không?
Lược đồ tài liệu không hợp lệ

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 Schema0 của chúng tôi thông qua trình điều khiển Node.js hoặc qua la bàn, chúng tôi sẽ gặp lỗi.Schema0 collection either via the Node.js Driver or via Compass, we will get an error.

Hướng dẫn is mongodb and mongoose the same? - mongodb và mongoose có giống nhau không?

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 Schema5 để chỉ xác thực các tài liệu mới được chèn vào cơ sở dữ liệu.Schema5 to only validate new documents inserted in the database.

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 Schema6 cho phép chúng tôi xác định điều gì xảy ra nếu truy vấn không xác thực. Theo mặc định, nó được đặt thành Schema7, nhưng chúng ta có thể thay đổi nó thành Schema8 nếu chúng ta muốn chèn vẫn xảy ra. Bây giờ thay vì chèn hoặc cập nhật lỗi, nó chỉ đơn giản là cảnh báo người dùng rằng hoạt động không xác thực.Schema6 option allows us to determine what happens if a query fails validation. By default, it is set to Schema7, but we can change it to Schema8 if we want the insert to still occur. Now instead of an insert or update erroring out, it would simply warn the user that the operation failed validation.

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 Schema9 với truy vấn của chúng tôi. Để chỉ cho bạn cách thức hoạt động của nó, giả sử chúng tôi muốn chèn chỉ một title trong bộ sưu tập ____10 của chúng tôi và chúng tôi không muốn bất kỳ dữ liệu nào khác. Nếu chúng ta cố gắng làm điều này ...Schema9 option with our query. To show you how this works, let's say we wanted to insert just a title in our Schema0 collection and we didn't want any other data. If we tried to just do this...

... 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ứu

Khu 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:Model2. So, an update operation to add a new comment to our post may look something like this:

Đ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 Model3 của chúng tôi với Model2 của Model5. Bây giờ, nếu chúng tôi muốn điền vào tài sản Model6 của mình khi chúng tôi thực hiện một truy vấn và thay vì chỉ trả lại Model2 trả lại toàn bộ tài liệu mà chúng tôi có thể làm:Model3 collection with the Model2 of Model5. Now, if we wanted to populate our Model6 property when we do a query—and instead of just returning the Model2 return the entire document—we could do:

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 Model8 cho phép các nhà phát triển về cơ bản thực hiện tham gia bên ngoài bên trái trên các bộ sưu tập trong một cơ sở dữ liệu MongoDB duy nhất. Nếu chúng tôi muốn điền thông tin người dùng bằng trình điều khiển Node.js, chúng tôi có thể tạo một đường ống tổng hợp để thực hiện. Điểm khởi đầu của chúng tôi bằng cách sử dụng toán tử Model8 có thể trông như thế này:Model8 that allows to developers to essentially do a left outer join on collections within a single MongoDB database. If we wanted to populate the user information using the Node.js driver, we could create an aggregation pipeline to do it. Our starting point using the Model8 operator could look like this:

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 insertOne()0 bằng dữ liệu người dùng, nhưng đó là một chút ngoài phạm vi của bài viết này. Nếu bạn muốn tìm hiểu thêm về cách các đường ống tổng hợp hoạt động với MongoDB, hãy xem các tài liệu tổng hợp.insertOne()0 field with the users data, but that's a bit out of the scope of this article. If you wish to learn more about how aggregation pipelines work with MongoDB, check out the aggregation docs.

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.