Mongoose kết nối với MongoDB Atlas
Bài viết này giới thiệu ngắn gọn về cơ sở dữ liệu và cách sử dụng chúng với các ứng dụng Node/Express. Sau đó, nó tiếp tục cho thấy cách chúng ta có thể sử dụng Mongoose để cung cấp quyền truy cập cơ sở dữ liệu cho trang web LocalLibrary. Nó giải thích cách khai báo lược đồ đối tượng và mô hình, các loại trường chính và xác thực cơ bản. Nó cũng trình bày ngắn gọn một số cách chính mà bạn có thể truy cập dữ liệu mô hình Show Nhân viên thư viện sẽ sử dụng trang web Thư viện địa phương để lưu trữ thông tin về sách và người mượn, trong khi các thành viên thư viện sẽ sử dụng nó để duyệt và tìm kiếm sách, tìm hiểu xem có bất kỳ bản sao nào không, sau đó đặt trước hoặc mượn chúng. Để lưu trữ và truy xuất thông tin hiệu quả, chúng tôi sẽ lưu trữ nó trong cơ sở dữ liệu Ứng dụng Express có thể sử dụng nhiều cơ sở dữ liệu khác nhau và có một số phương pháp bạn có thể sử dụng để thực hiện các thao tác Tạo, Đọc, Cập nhật và Xóa (CRUD). Hướng dẫn này cung cấp một cái nhìn tổng quan ngắn gọn về một số tùy chọn có sẵn và sau đó tiếp tục hiển thị chi tiết các cơ chế cụ thể được chọn Các ứng dụng Express có thể sử dụng bất kỳ cơ sở dữ liệu nào được Node hỗ trợ (Bản thân Express không xác định bất kỳ hành vi/yêu cầu bổ sung cụ thể nào để quản lý cơ sở dữ liệu). Có nhiều tùy chọn phổ biến, bao gồm PostgreSQL, MySQL, Redis, SQLite và MongoDB Khi chọn cơ sở dữ liệu, bạn nên xem xét những thứ như đường cong thời gian để đạt năng suất/học tập, hiệu suất, khả năng sao chép/sao lưu dễ dàng, chi phí, hỗ trợ cộng đồng, v.v. Mặc dù không có cơ sở dữ liệu "tốt nhất" duy nhất, nhưng hầu hết mọi giải pháp phổ biến đều có thể chấp nhận được đối với trang web có quy mô vừa và nhỏ như Thư viện địa phương của chúng tôi Để biết thêm thông tin về các tùy chọn, hãy xem Tích hợp cơ sở dữ liệu (Tài liệu nhanh) Có hai cách tiếp cận phổ biến để tương tác với cơ sở dữ liệu
Hiệu suất tốt nhất có thể đạt được bằng cách sử dụng SQL hoặc bất kỳ ngôn ngữ truy vấn nào được cơ sở dữ liệu hỗ trợ. ODM thường chậm hơn vì chúng sử dụng mã dịch để ánh xạ giữa các đối tượng và định dạng cơ sở dữ liệu, định dạng này có thể không sử dụng các truy vấn cơ sở dữ liệu hiệu quả nhất (điều này đặc biệt đúng nếu ODM hỗ trợ các phụ trợ cơ sở dữ liệu khác nhau và phải thỏa hiệp nhiều hơn về cơ sở dữ liệu nào Lợi ích của việc sử dụng ORM là các lập trình viên có thể tiếp tục suy nghĩ về các đối tượng JavaScript thay vì ngữ nghĩa của cơ sở dữ liệu — điều này đặc biệt đúng nếu bạn cần làm việc với các cơ sở dữ liệu khác nhau (trên cùng một trang web hoặc các trang web khác nhau). Họ cũng cung cấp một nơi rõ ràng để thực hiện xác thực dữ liệu Ghi chú. Sử dụng ODM/ORM thường dẫn đến chi phí phát triển và bảo trì thấp hơn. Trừ khi bạn rất quen thuộc với ngôn ngữ truy vấn gốc hoặc hiệu suất là tối quan trọng, bạn nên cân nhắc sử dụng ODM Có nhiều giải pháp ODM/ORM có sẵn trên trang web quản lý gói npm (kiểm tra các thẻ odm và orm để biết một tập hợp con. ) Một vài giải pháp phổ biến tại thời điểm viết là
Theo nguyên tắc chung, bạn nên xem xét cả các tính năng được cung cấp và "hoạt động cộng đồng" (tải xuống, đóng góp, báo cáo lỗi, chất lượng tài liệu, v.v. ) khi lựa chọn giải pháp. Tại thời điểm viết bài, Mongoose cho đến nay là ODM phổ biến nhất và là một lựa chọn hợp lý nếu bạn đang sử dụng MongoDB cho cơ sở dữ liệu của mình Đối với ví dụ về Thư viện cục bộ (và phần còn lại của chủ đề này), chúng tôi sẽ sử dụng Mongoose ODM để truy cập dữ liệu thư viện của chúng tôi. Mongoose hoạt động như một giao diện người dùng cho MongoDB, một cơ sở dữ liệu NoSQL nguồn mở sử dụng mô hình dữ liệu hướng tài liệu. Một "bộ sưu tập" các "tài liệu" trong cơ sở dữ liệu MongoDB tương tự như một "bảng" các "hàng" trong cơ sở dữ liệu quan hệ Sự kết hợp giữa ODM và cơ sở dữ liệu này cực kỳ phổ biến trong cộng đồng Node, một phần vì hệ thống truy vấn và lưu trữ tài liệu trông rất giống JSON và do đó quen thuộc với các nhà phát triển JavaScript Ghi chú. Bạn không cần phải biết MongoDB để sử dụng Mongoose, mặc dù các phần của tài liệu Mongoose sẽ dễ sử dụng và dễ hiểu hơn nếu bạn đã quen thuộc với MongoDB Phần còn lại của hướng dẫn này chỉ ra cách xác định và truy cập lược đồ và mô hình Mongoose cho ví dụ về trang web LocalLibrary Trước khi bạn tham gia và bắt đầu mã hóa các mô hình, bạn nên dành vài phút để suy nghĩ về dữ liệu nào chúng ta cần lưu trữ và mối quan hệ giữa các đối tượng khác nhau Chúng tôi biết rằng chúng tôi cần lưu trữ thông tin về sách (tên sách, tóm tắt, tác giả, thể loại, ISBN) và rằng chúng tôi có thể có sẵn nhiều bản sao (với id duy nhất trên toàn cầu, trạng thái sẵn có, v.v. ). Chúng tôi có thể cần lưu trữ nhiều thông tin về tác giả hơn là chỉ tên của họ và có thể có nhiều tác giả có cùng tên hoặc tên tương tự. Chúng tôi muốn có thể sắp xếp thông tin dựa trên tên sách, tác giả, thể loại và danh mục Khi thiết kế các mô hình của bạn, bạn nên có các mô hình riêng biệt cho mọi "đối tượng" (một nhóm thông tin liên quan). Trong trường hợp này, một số ứng cử viên rõ ràng cho các mô hình này là sách, thực thể sách và tác giả. Bạn cũng có thể muốn sử dụng các mô hình để thể hiện các tùy chọn trong danh sách lựa chọn (e. g. như danh sách lựa chọn thả xuống), thay vì mã hóa cứng các lựa chọn vào chính trang web — điều này được khuyến nghị khi tất cả các tùy chọn không được biết trước hoặc có thể thay đổi. Một ví dụ điển hình là một thể loại (e. g. tưởng tượng, khoa học viễn tưởng, vv. ) Khi chúng tôi đã quyết định về các mô hình và lĩnh vực của mình, chúng tôi cần suy nghĩ về mối quan hệ giữa chúng Với ý nghĩ đó, sơ đồ liên kết UML bên dưới hiển thị các mô hình mà chúng ta sẽ xác định trong trường hợp này (dưới dạng hộp). Như đã thảo luận ở trên, chúng tôi đã tạo các mô hình cho cuốn sách (các chi tiết chung của cuốn sách), phiên bản sách (trạng thái của các bản sao cụ thể của cuốn sách có sẵn trong hệ thống) và tác giả. Chúng tôi cũng đã quyết định có một mô hình cho thể loại này để các giá trị có thể được tạo ra một cách linh hoạt. Chúng tôi đã quyết định không có mô hình cho 6 — chúng tôi sẽ mã hóa cứng các giá trị có thể chấp nhận được vì chúng tôi không mong đợi những giá trị này thay đổi. Trong mỗi hộp, bạn có thể thấy tên mô hình, tên và loại trường, cũng như các phương thức và kiểu trả về của chúngSơ đồ cũng cho thấy mối quan hệ giữa các mô hình, bao gồm cả bội số của chúng. Các bội số là các số trên sơ đồ hiển thị các số (tối đa và tối thiểu) của mỗi mô hình có thể có trong mối quan hệ. Ví dụ: đường kết nối giữa các hộp cho thấy 7 và 8 có liên quan. Các số gần với mô hình 7 cho thấy rằng một 8 phải có không hoặc nhiều hơn các 7 (bao nhiêu tùy thích), trong khi các số ở đầu kia của dòng bên cạnh 8 cho thấy rằng một cuốn sách có thể không có hoặc nhiều hơn các 8 liên quanGhi chú. Như đã thảo luận trong phần dưới đây của chúng tôi, tốt hơn là nên có trường xác định mối quan hệ giữa các tài liệu/mô hình chỉ trong một mô hình (bạn vẫn có thể tìm thấy mối quan hệ ngược lại bằng cách tìm kiếm 4 được liên kết trong mô hình khác). Dưới đây chúng tôi đã chọn để xác định mối quan hệ giữa 7/ 8 và 7/ 8 trong Lược đồ sách và mối quan hệ giữa 7/ 40 trong Lược đồ 40. Sự lựa chọn này hơi tùy tiện - chúng ta cũng có thể có trường trong lược đồ khácGhi chú. Phần tiếp theo cung cấp kiến thức cơ bản giải thích cách xác định và sử dụng các mô hình. Khi bạn đọc nó, hãy cân nhắc cách chúng ta sẽ xây dựng từng mô hình trong sơ đồ trên Phần này cung cấp tổng quan về cách kết nối Mongoose với cơ sở dữ liệu MongoDB, cách xác định lược đồ và mô hình cũng như cách thực hiện các truy vấn cơ bản Ghi chú. Đoạn mồi này bị ảnh hưởng nặng nề bởi khởi động nhanh Mongoose trên npm và tài liệu chính thức Mongoose được cài đặt trong dự án của bạn (gói. json) giống như bất kỳ phần phụ thuộc nào khác — sử dụng npm. Để cài đặt nó, hãy sử dụng lệnh sau trong thư mục dự án của bạn 6Cài đặt Mongoose thêm tất cả các phụ thuộc của nó, bao gồm trình điều khiển cơ sở dữ liệu MongoDB, nhưng bản thân nó không cài đặt MongoDB. Nếu bạn muốn cài đặt máy chủ MongoDB thì bạn có thể tải xuống trình cài đặt từ đây cho các hệ điều hành khác nhau và cài đặt cục bộ. Bạn cũng có thể sử dụng các phiên bản MongoDB dựa trên đám mây Ghi chú. Đối với hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu dựa trên đám mây MongoDB Atlas dưới dạng tầng dịch vụ miễn phí để cung cấp cơ sở dữ liệu. Điều này phù hợp để phát triển và có ý nghĩa đối với hướng dẫn vì nó làm cho hệ điều hành "cài đặt" trở nên độc lập (cơ sở dữ liệu dưới dạng dịch vụ cũng là một cách tiếp cận bạn có thể sử dụng cho cơ sở dữ liệu sản xuất của mình) Mongoose yêu cầu kết nối với cơ sở dữ liệu MongoDB. Bạn có thể 42 và kết nối với cơ sở dữ liệu được lưu trữ cục bộ với 43 như được hiển thị bên dưới (đối với hướng dẫn, thay vào đó, chúng tôi sẽ kết nối với cơ sở dữ liệu được lưu trữ trên internet) 9Bạn có thể lấy đối tượng 44 mặc định với 45. Sau khi kết nối, sự kiện mở sẽ được kích hoạt trên phiên bản 44Ghi chú. Nếu bạn cần tạo các kết nối bổ sung, bạn có thể sử dụng 47. Điều này có cùng dạng URI cơ sở dữ liệu (với máy chủ, cơ sở dữ liệu, cổng, tùy chọn, v.v. ) dưới dạng 48 và trả về một đối tượng 44)Các mô hình được xác định bằng giao diện 60. Lược đồ cho phép bạn xác định các trường được lưu trữ trong mỗi tài liệu cùng với các yêu cầu xác thực và giá trị mặc định của chúng. Ngoài ra, bạn có thể xác định các phương thức trợ giúp tĩnh và phiên bản để làm việc với các kiểu dữ liệu của mình dễ dàng hơn và cả các thuộc tính ảo mà bạn có thể sử dụng giống như bất kỳ trường nào khác, nhưng không thực sự được lưu trữ trong cơ sở dữ liệu (chúng ta sẽ thảo luận Các lược đồ sau đó được "biên dịch" thành các mô hình bằng phương pháp 61. Khi bạn có một mô hình, bạn có thể sử dụng nó để tìm, tạo, cập nhật và xóa các đối tượng thuộc loại đã choGhi chú. Mỗi mô hình ánh xạ tới một tập hợp các tài liệu trong cơ sở dữ liệu MongoDB. Các tài liệu sẽ chứa các trường/loại lược đồ được xác định trong mô hình 60Xác định lược đồĐoạn mã dưới đây cho thấy cách bạn có thể định nghĩa một lược đồ đơn giản. Trước tiên, bạn 42 cầy mangut, sau đó sử dụng hàm tạo Schema để tạo một thể hiện lược đồ mới, xác định các trường khác nhau bên trong nó trong tham số đối tượng của hàm tạo
Trong trường hợp trên, chúng tôi chỉ có hai trường, một chuỗi và một ngày. Trong các phần tiếp theo, chúng tôi sẽ hiển thị một số loại trường khác, xác thực và các phương thức khác Tạo một mô hìnhCác mô hình được tạo từ các lược đồ bằng phương pháp 61________số 8 Đối số đầu tiên là tên riêng của bộ sưu tập sẽ được tạo cho mô hình của bạn (Mongoose sẽ tạo bộ sưu tập cơ sở dữ liệu cho mô hình SomeModel ở trên) và đối số thứ hai là lược đồ bạn muốn sử dụng để tạo mô hình Ghi chú. Khi bạn đã xác định các lớp mô hình của mình, bạn có thể sử dụng chúng để tạo, cập nhật hoặc xóa bản ghi và chạy các truy vấn để lấy tất cả bản ghi hoặc tập con cụ thể của bản ghi. Chúng tôi sẽ chỉ cho bạn cách thực hiện việc này trong phần này và khi chúng tôi tạo chế độ xem của mình Các loại lược đồ (trường)Một lược đồ có thể có số lượng trường tùy ý — mỗi lược đồ đại diện cho một trường trong tài liệu được lưu trữ trong MongoDB. Một lược đồ ví dụ hiển thị nhiều loại trường phổ biến và cách chúng được khai báo được hiển thị bên dưới 4Hầu hết các SchemaTypes (mô tả sau "type. " hoặc sau tên trường) là tự giải thích. Các trường hợp ngoại lệ là
Mã này cũng hiển thị cả hai cách khai báo trường
Để biết thêm thông tin về các tùy chọn, hãy xem SchemaTypes (Mongoose docs) Thẩm địnhMongoose cung cấp trình xác thực tùy chỉnh và tích hợp cũng như trình xác thực đồng bộ và không đồng bộ. Nó cho phép bạn chỉ định cả phạm vi giá trị được chấp nhận và thông báo lỗi cho lỗi xác thực trong mọi trường hợp Trình xác thực tích hợp bao gồm
Ví dụ bên dưới (được sửa đổi một chút từ tài liệu Mongoose) cho thấy cách bạn có thể chỉ định một số loại trình xác thực và thông báo lỗi 6Để biết thông tin đầy đủ về xác thực trường, hãy xem Xác thực (tài liệu Mongoose) tài sản ảoThuộc tính ảo là thuộc tính tài liệu mà bạn có thể lấy và đặt nhưng không được duy trì trong MongoDB. Các getter hữu ích cho việc định dạng hoặc kết hợp các trường, trong khi các setter hữu ích cho việc tách một giá trị thành nhiều giá trị để lưu trữ. Ví dụ trong tài liệu xây dựng (và giải cấu trúc) một thuộc tính ảo tên đầy đủ từ trường họ và tên, cách này dễ dàng và rõ ràng hơn so với việc xây dựng tên đầy đủ mỗi khi một tên được sử dụng trong mẫu Ghi chú. Chúng tôi sẽ sử dụng một thuộc tính ảo trong thư viện để xác định một URL duy nhất cho mỗi bản ghi mô hình bằng đường dẫn và giá trị 4 của bản ghiĐể biết thêm thông tin, xem (Mongoose documentation) Các phương thức và trợ giúp truy vấnMột lược đồ cũng có thể có , , và. Phương thức thể hiện và phương thức tĩnh tương tự nhau, nhưng có sự khác biệt rõ ràng là phương thức thể hiện được liên kết với một bản ghi cụ thể và có quyền truy cập vào đối tượng hiện tại. Trình trợ giúp truy vấn cho phép bạn mở rộng API trình tạo truy vấn có thể xâu chuỗi của cầy mangut (ví dụ: cho phép bạn thêm truy vấn "byName" ngoài các phương thức 88, 89 và 90)Khi bạn đã tạo một lược đồ, bạn có thể sử dụng nó để tạo các mô hình. Mô hình đại diện cho một tập hợp các tài liệu trong cơ sở dữ liệu mà bạn có thể tìm kiếm, trong khi các phiên bản của mô hình đại diện cho các tài liệu riêng lẻ mà bạn có thể lưu và truy xuất Chúng tôi cung cấp một cái nhìn tổng quan ngắn gọn dưới đây. Để biết thêm thông tin xem. Mô hình (tài liệu Mongoose) Tạo và sửa đổi tài liệuĐể tạo một bản ghi, bạn có thể xác định một phiên bản của mô hình và sau đó gọi 91. Các ví dụ bên dưới giả sử SomeModel là một mô hình (với một trường duy nhất là "tên") mà chúng tôi đã tạo từ lược đồ của mình 8Việc tạo bản ghi (cùng với cập nhật, xóa và truy vấn) là các hoạt động không đồng bộ — bạn cung cấp lệnh gọi lại được gọi khi hoạt động hoàn tất. API sử dụng quy ước đối số lỗi đầu tiên, vì vậy đối số đầu tiên cho lệnh gọi lại sẽ luôn là một giá trị lỗi (hoặc null). Nếu API trả về một số kết quả, điều này sẽ được cung cấp làm đối số thứ hai Bạn cũng có thể sử dụng 92 để xác định phiên bản mô hình cùng lúc khi bạn lưu nó. Cuộc gọi lại sẽ trả về lỗi cho đối số đầu tiên và phiên bản mô hình mới được tạo cho đối số thứ hai 9Mọi kiểu máy đều có một kết nối được liên kết (đây sẽ là kết nối mặc định khi bạn sử dụng 61). Bạn tạo một kết nối mới và gọi 94 trên đó để tạo tài liệu trên một cơ sở dữ liệu khácBạn có thể truy cập các trường trong bản ghi mới này bằng cú pháp dấu chấm và thay đổi các giá trị. Bạn phải gọi 91 hoặc 96 để lưu trữ các giá trị đã sửa đổi trở lại cơ sở dữ liệu 8Tìm kiếm hồ sơBạn có thể tìm kiếm các bản ghi bằng các phương thức truy vấn, chỉ định các điều kiện truy vấn dưới dạng tài liệu JSON. Đoạn mã dưới đây cho thấy cách bạn có thể tìm thấy tất cả các vận động viên trong cơ sở dữ liệu chơi quần vợt, chỉ trả lại các trường cho tên và tuổi của vận động viên. Ở đây chúng tôi chỉ xác định một trường phù hợp (thể thao) nhưng bạn có thể thêm nhiều tiêu chí hơn, chỉ định tiêu chí biểu thức chính quy hoặc xóa hoàn toàn các điều kiện để trả về tất cả các vận động viên 9Nếu bạn chỉ định một cuộc gọi lại, như được hiển thị ở trên, truy vấn sẽ thực thi ngay lập tức. Cuộc gọi lại sẽ được gọi khi tìm kiếm hoàn tất Ghi chú. Tất cả các cuộc gọi lại trong Mongoose đều sử dụng mẫu 97. Nếu xảy ra lỗi khi thực hiện truy vấn, tham số 98 sẽ chứa tài liệu lỗi và 99 sẽ là null. Nếu truy vấn thành công, tham số 98 sẽ không có giá trị và 99 sẽ được điền cùng với kết quả của truy vấnGhi chú. Điều quan trọng cần nhớ là không tìm thấy bất kỳ kết quả nào không phải là lỗi đối với tìm kiếm — nhưng đó có thể là trường hợp không thành công trong ngữ cảnh ứng dụng của bạn. Nếu ứng dụng của bạn mong muốn một tìm kiếm tìm thấy một giá trị, bạn có thể kiểm tra kết quả trong hàm gọi lại ( 82) hoặc xâu chuỗi phương thức trên truy vấnNếu bạn không chỉ định gọi lại thì API sẽ trả về một biến loại. Bạn có thể sử dụng đối tượng truy vấn này để xây dựng truy vấn của mình và sau đó thực hiện truy vấn đó (có gọi lại) sau đó bằng phương thức 83 90Ở trên, chúng tôi đã xác định các điều kiện truy vấn trong phương thức 88. Chúng ta cũng có thể làm điều này bằng cách sử dụng hàm 85 và chúng ta có thể xâu chuỗi tất cả các phần của truy vấn lại với nhau bằng cách sử dụng toán tử dấu chấm (. ) thay vì thêm chúng một cách riêng biệt. Đoạn mã bên dưới giống như truy vấn của chúng tôi ở trên, với một điều kiện bổ sung cho độ tuổi 91Phương thức lấy tất cả các bản ghi phù hợp, nhưng thường thì bạn chỉ muốn lấy một bản ghi phù hợp. Các phương pháp sau truy vấn cho một bản ghi
Ghi chú. Ngoài ra còn có một phương pháp mà bạn có thể sử dụng để lấy số lượng mục phù hợp với điều kiện. Điều này hữu ích nếu bạn muốn thực hiện đếm mà không thực sự tìm nạp các bản ghi Còn rất nhiều điều bạn có thể làm với các truy vấn. Để biết thêm thông tin xem. Truy vấn (tài liệu Mongoose) Làm việc với các tài liệu liên quan - dân sốBạn có thể tạo tham chiếu từ một tài liệu/phiên bản mô hình này sang một tài liệu/mô hình khác bằng cách sử dụng trường lược đồ 65 hoặc từ một tài liệu đến nhiều tài liệu bằng cách sử dụng một mảng 97. Trường lưu trữ id của mô hình liên quan. Nếu bạn cần nội dung thực của tài liệu được liên kết, bạn có thể sử dụng phương thức trong truy vấn để thay thế id bằng dữ liệu thựcVí dụ: lược đồ sau xác định tác giả và câu chuyện. Mỗi tác giả có thể có nhiều câu chuyện mà chúng tôi biểu diễn dưới dạng một mảng của 65. Mỗi câu chuyện có thể có một tác giả duy nhất. Thuộc tính 900 cho lược đồ biết mô hình nào có thể được gán cho trường này 92Chúng tôi có thể lưu các tham chiếu của mình vào tài liệu liên quan bằng cách gán giá trị 4. Dưới đây, chúng tôi tạo một tác giả, sau đó là một câu chuyện và gán id tác giả cho trường tác giả của câu chuyện của chúng tôi 93Tài liệu câu chuyện của chúng tôi hiện có một tác giả được tham chiếu bởi ID của tài liệu tác giả. Để lấy thông tin tác giả trong kết quả truyện ta sử dụng 67, như hình bên dưới 94Ghi chú. Những độc giả tinh ý sẽ lưu ý rằng chúng tôi đã thêm một tác giả vào câu chuyện của mình, nhưng chúng tôi đã không làm bất cứ điều gì để thêm câu chuyện của mình vào mảng 903 của tác giả. Làm thế nào sau đó chúng ta có thể nhận được tất cả các câu chuyện của một tác giả cụ thể? Cách tốt hơn là lấy 4 của tác giả của chúng tôi, sau đó sử dụng 88 để tìm kiếm điều này trong trường tác giả trên tất cả các câu chuyện 95Đây gần như là mọi thứ bạn cần biết về cách làm việc với các mục liên quan cho hướng dẫn này. Để biết thêm thông tin chi tiết, xem Dân số (Mongoose docs) Mặc dù bạn có thể tạo các lược đồ và mô hình bằng cách sử dụng bất kỳ cấu trúc tệp nào bạn thích, nhưng chúng tôi thực sự khuyên bạn nên xác định từng lược đồ mô hình trong mô-đun (tệp) riêng của nó, sau đó xuất phương thức để tạo mô hình. Điều này được hiển thị dưới đây 96Sau đó, bạn có thể yêu cầu và sử dụng mô hình ngay lập tức trong các tệp khác. Dưới đây chúng tôi chỉ ra cách bạn có thể sử dụng nó để lấy tất cả các phiên bản của mô hình 97Bây giờ chúng ta đã hiểu điều gì đó về những gì Mongoose có thể làm và cách chúng ta muốn thiết kế các mô hình của mình, đã đến lúc bắt đầu làm việc trên trang web LocalLibrary. Điều đầu tiên chúng tôi muốn làm là thiết lập cơ sở dữ liệu MongoDB mà chúng tôi có thể sử dụng để lưu trữ dữ liệu thư viện của mình Đối với hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu hộp cát được lưu trữ trên đám mây MongoDB Atlas. Tầng cơ sở dữ liệu này không được coi là phù hợp cho các trang web sản xuất vì nó không có dự phòng, nhưng nó rất tốt cho việc phát triển và tạo mẫu. Chúng tôi đang sử dụng nó ở đây vì nó miễn phí và dễ cài đặt, và vì MongoDB Atlas là cơ sở dữ liệu phổ biến với tư cách là nhà cung cấp dịch vụ mà bạn có thể chọn một cách hợp lý cho cơ sở dữ liệu sản xuất của mình (các lựa chọn phổ biến khác tại thời điểm viết bao gồm Compose, ScaleGrid Ghi chú. Nếu muốn, bạn có thể thiết lập cục bộ cơ sở dữ liệu MongoDb bằng cách tải xuống và cài đặt các tệp nhị phân thích hợp cho hệ thống của mình. Phần còn lại của hướng dẫn trong bài viết này sẽ tương tự, ngoại trừ URL cơ sở dữ liệu bạn sẽ chỉ định khi kết nối. Trong Hướng dẫn cấp tốc Phần 7. Triển khai hướng dẫn Sản xuất, chúng tôi lưu trữ cả ứng dụng và cơ sở dữ liệu trên Đường sắt, nhưng chúng tôi cũng có thể sử dụng cơ sở dữ liệu trên MongoDB Atlas Trước tiên, bạn cần tạo một tài khoản với MongoDB Atlas (tài khoản này miễn phí và chỉ yêu cầu bạn nhập các chi tiết liên hệ cơ bản và xác nhận các điều khoản dịch vụ của họ) Sau khi đăng nhập, bạn sẽ được đưa đến màn hình chính
Bây giờ bạn đã tạo cơ sở dữ liệu và có một URL (có tên người dùng và mật khẩu) có thể được sử dụng để truy cập cơ sở dữ liệu đó. Điều này sẽ trông giống như. 911Mở một dấu nhắc lệnh và điều hướng đến thư mục nơi bạn đã tạo trang web Thư viện cục bộ bộ xương của mình. Nhập lệnh sau để cài đặt Mongoose (và các phụ thuộc của nó) và thêm nó vào gói của bạn. json, trừ khi bạn đã làm như vậy khi đọc phần trên 6Mở chương trình. js (trong thư mục gốc của dự án của bạn) và sao chép văn bản bên dưới nơi bạn khai báo đối tượng ứng dụng Express (sau dòng 912). Thay thế chuỗi URL cơ sở dữ liệu ('insert_your_database_url_here') bằng URL vị trí đại diện cho cơ sở dữ liệu của riêng bạn (i. e. sử dụng thông tin từ mongoDB Atlas) 99Như đã thảo luận, mã này tạo kết nối mặc định tới cơ sở dữ liệu và liên kết với sự kiện lỗi (do đó lỗi sẽ được in ra bảng điều khiển) Chúng tôi sẽ xác định một mô-đun riêng cho từng mô hình, như. Bắt đầu bằng cách tạo một thư mục cho các mô hình của chúng tôi trong thư mục gốc của dự án (/models) và sau đó tạo các tệp riêng cho từng mô hình 0Sao chép mã lược đồ 8 được hiển thị bên dưới và dán vào. /mô hình/tác giả. tập tin js. Lược đồ xác định một tác giả có 80 SchemaTypes cho tên và họ (bắt buộc, với tối đa 100 ký tự) và các trường 915 cho ngày sinh và ngày mất 1Chúng tôi cũng đã khai báo một cho AuthorSchema có tên là "url" trả về URL tuyệt đối cần thiết để lấy một phiên bản cụ thể của mô hình — chúng tôi sẽ sử dụng thuộc tính này trong các mẫu của mình bất cứ khi nào chúng tôi cần lấy liên kết đến một tác giả cụ thể Ghi chú. Khai báo các URL của chúng tôi dưới dạng ảo trong lược đồ là một ý tưởng hay vì sau đó URL cho một mục chỉ cần được thay đổi ở một nơi. Tại thời điểm này, một liên kết sử dụng URL này sẽ không hoạt động vì chúng tôi không có bất kỳ mã xử lý tuyến đường nào cho các phiên bản mô hình riêng lẻ. Chúng tôi sẽ thiết lập chúng trong một bài viết sau Khi kết thúc mô-đun, chúng tôi xuất mô hình Sao chép mã lược đồ 7 được hiển thị bên dưới và dán vào. /mô hình/sách. tập tin js. Hầu hết điều này tương tự như mô hình tác giả — chúng tôi đã khai báo một lược đồ với một số trường chuỗi và ảo để nhận URL của các bản ghi sách cụ thể và chúng tôi đã xuất mô hình 2Sự khác biệt chính ở đây là chúng tôi đã tạo hai tham chiếu đến các mô hình khác
Cuối cùng, sao chép mã lược đồ 40 hiển thị bên dưới và dán vào. /models/bookinstance. tập tin js. 40 đại diện cho một bản sao cụ thể của một cuốn sách mà ai đó có thể mượn và bao gồm thông tin về việc liệu bản sao đó có sẵn hay không, dự kiến sẽ trả lại vào ngày nào và chi tiết "nhà xuất bản" (hoặc phiên bản) 3Những điều mới chúng tôi hiển thị ở đây là các tùy chọn trường
Mọi thứ khác nên quen thuộc với lược đồ trước của chúng tôi mở của bạn. /mô hình/thể loại. js và tạo một lược đồ để lưu trữ các thể loại (danh mục sách, e. g. cho dù đó là tiểu thuyết hay phi hư cấu, lãng mạn hay lịch sử quân sự, v.v. ) Định nghĩa sẽ rất giống với các mô hình khác
Đó là nó. Bây giờ chúng tôi có tất cả các mô hình cho trang web được thiết lập Để kiểm tra các mô hình (và để tạo một số sách ví dụ và các mục khác mà chúng ta có thể sử dụng trong các bài viết tiếp theo của mình), bây giờ chúng ta sẽ chạy một tập lệnh độc lập để tạo các mục của từng loại
Ghi chú. Chuyển đến cơ sở dữ liệu của bạn trên mongoDB Atlas (trong tab Bộ sưu tập). Giờ đây, bạn có thể đi sâu vào các bộ sưu tập Sách, Tác giả, Thể loại và Phiên bản sách riêng lẻ cũng như xem các tài liệu riêng lẻ Trong bài viết này, chúng ta đã tìm hiểu một chút về cơ sở dữ liệu và ORM trên Node/Express, cũng như rất nhiều điều về cách định nghĩa lược đồ và mô hình Mongoose. Sau đó, chúng tôi đã sử dụng thông tin này để thiết kế và triển khai các mô hình 7, 40, 8 và 8 cho trang web LocalLibraryCuối cùng, chúng tôi đã thử nghiệm các mô hình của mình bằng cách tạo một số phiên bản (sử dụng tập lệnh độc lập). Trong bài viết tiếp theo, chúng ta sẽ xem xét việc tạo một số trang để hiển thị các đối tượng này Cầy mangut có thể kết nối với MongoDB Atlas không?Bạn có thể kết nối với MongoDB bằng cầy mangut. phương thức connect() . cầy mangut. kết nối ('mongodb. //127. 0. 0. 1. 27017/myapp'); .
Làm thế nào để sử dụng Atlas với cầy mangut?Kết nối NodeJs(Express) và MongoDB Atlas bằng Mongoose(2022) . Tạo ứng dụng Node-Express Cài đặt Mongoose Tạo tài khoản MongoDB Atlas Kết nối cơ sở dữ liệu bản đồ MongoDB với ứng dụng của chúng tôi Làm cách nào để kết nối với cơ sở dữ liệu MongoDB Atlas?Bạn sẽ cần lấy chuỗi kết nối của cụm từ Atlas để kết nối với cụm bằng trình điều khiển PyMongo. . Nhấp vào Kết nối. . Nhấp vào Chọn phương thức kết nối Nhấp vào Kết nối ứng dụng của bạn. . Chọn Python và phiên bản trình điều khiển của bạn. . Sao chép chuỗi kết nối được cung cấp Định cấu hình chuỗi kết nối được cung cấp Làm cách nào để kết nối MongoDB Atlas bằng Python?Bắt đầu bằng cách tạo một tệp python mới trên hệ thống của bạn test_mongo_connection. py. Nhập pymongo là trình điều khiển python cho phép chúng tôi kết nối với cơ sở dữ liệu MongoDB. Kết nối cụm bằng URL. Thay thế tên người dùng và mật khẩu của bạn trong URL này |