Mongoose trong NodeJS là gì?

Mô-đun Mongoose là một trong những mô-đun bên ngoài mạnh mẽ nhất của NodeJS. Mongoose là một MongoDB ODM tôi. e (Mô hình hóa cơ sở dữ liệu đối tượng) được sử dụng để dịch mã và biểu diễn của nó từ MongoDB sang Nút. máy chủ js

Ưu điểm của mô-đun Mongoose

  1. Việc xác thực bộ sưu tập của cơ sở dữ liệu MongoDB có thể được thực hiện dễ dàng
  2. Cấu trúc được xác định trước có thể được thực hiện trên bộ sưu tập
  3. Các ràng buộc có thể được áp dụng cho các tài liệu của các bộ sưu tập bằng Mongoose
  4. Mô-đun Mongoose được xây dựng trên đầu trình điều khiển MongoDB và cung cấp khả năng trừu tượng hóa truy vấn dễ dàng và xác định truy vấn

Nhiều developer có thói quen sử dụng SQL cảm thấy không thoải mái khi làm việc trên MongoDB vì cơ sở dữ liệu Nosql và cấu trúc linh hoạt. Ở đây Mongoose đóng vai trò quan trọng và làm cho lược đồ bộ sưu tập tương tự như cơ sở dữ liệu SQL

Mô-đun Mongoose cung cấp một số chức năng để thao tác với các tài liệu của bộ sưu tập cơ sở dữ liệu MongoDB

Triển khai cho cấu trúc xác định và Xác thực bộ sưu tập. Mô-đun cầy mangut đã áp đặt một cấu trúc nhất định lên bộ sưu tập và làm cho bộ sưu tập trở nên cứng nhắc

Mongoose là một khung JavaScript thường được sử dụng trong Node. js với cơ sở dữ liệu MongoDB. Trong bài viết này, tôi sẽ giới thiệu với bạn về Mongoose và MongoDB, và quan trọng hơn là nơi các công nghệ này phù hợp với ứng dụng của bạn

MongoDB là gì?

Hãy bắt đầu với MongoDB. MongoDB là cơ sở dữ liệu lưu trữ dữ liệu của bạn dưới dạng tài liệu. Hầu hết các tài liệu này giống với cấu trúc giống như JSON

1
{
2
  firstName: "Jamie",
3
  lastName: "Munro"
4
}

Một tài liệu sau đó được đặt trong một bộ sưu tập. Như một ví dụ, ví dụ tài liệu trên định nghĩa một đối tượng

}
55. Đối tượng
}
55 này sau đó thường là một phần của bộ sưu tập có tên là
}
57

Một trong những yếu tố quan trọng với MongoDB là tính linh hoạt của nó khi nói đến cấu trúc. Mặc dù trong ví dụ đầu tiên, đối tượng

}
55 chứa thuộc tính
}
59 và
}
60, những thuộc tính này không bắt buộc phải có trong mọi tài liệu
}
55 là một phần của bộ sưu tập
}
57. Đây là điều làm cho MongoDB rất khác so với cơ sở dữ liệu SQL như MySQL hoặc Microsoft SQL Server yêu cầu một lược đồ cơ sở dữ liệu được xác định rõ ràng cho từng đối tượng mà nó lưu trữ

Khả năng tạo các đối tượng động được lưu trữ dưới dạng tài liệu trong cơ sở dữ liệu là nơi Mongoose phát huy tác dụng

Mongoose là gì?

Mongoose là Trình ánh xạ tài liệu đối tượng (ODM). Điều này có nghĩa là Mongoose cho phép bạn xác định các đối tượng bằng lược đồ được đánh máy mạnh được ánh xạ tới tài liệu MongoDB

Mongoose cung cấp một lượng chức năng đáng kinh ngạc xung quanh việc tạo và làm việc với các lược đồ. Mongoose hiện có tám SchemaTypes mà một thuộc tính được lưu khi nó được lưu vào MongoDB. họ đang

  1. Chuỗi
  2. Số
  3. Ngày
  4. Đệm
  5. Boolean
  6. Trộn
  7. ID đối tượng
  8. Mảng

Mỗi loại dữ liệu cho phép bạn chỉ định

  • một giá trị mặc định
  • một chức năng xác nhận tùy chỉnh
  • chỉ ra một lĩnh vực được yêu cầu
  • một hàm get cho phép bạn thao tác dữ liệu trước khi nó được trả về dưới dạng một đối tượng
  • một chức năng thiết lập cho phép bạn thao tác dữ liệu trước khi nó được lưu vào cơ sở dữ liệu
  • tạo các chỉ mục để cho phép dữ liệu được tìm nạp nhanh hơn

Ngoài các tùy chọn phổ biến này, một số loại dữ liệu nhất định cho phép bạn tùy chỉnh thêm cách dữ liệu được lưu trữ và truy xuất từ ​​​​cơ sở dữ liệu. Ví dụ: kiểu dữ liệu

}
63 cũng cho phép bạn chỉ định các tùy chọn bổ sung sau

  • chuyển đổi nó thành chữ thường
  • chuyển đổi nó thành chữ hoa
  • cắt dữ liệu trước khi lưu
  • một biểu thức chính quy có thể giới hạn dữ liệu được phép lưu trong quá trình xác thực
  • một enum có thể xác định danh sách các chuỗi hợp lệ

Các thuộc tính

}
64 và
}
65 đều hỗ trợ chỉ định giá trị tối thiểu và tối đa được phép cho trường đó

Hầu hết trong số tám loại dữ liệu được phép sẽ khá quen thuộc với bạn. Tuy nhiên, có một số trường hợp ngoại lệ có thể khiến bạn bất ngờ, chẳng hạn như 

}
66,
}
67,
}
68 và
}
69

Kiểu dữ liệu

}
66 cho phép bạn lưu dữ liệu nhị phân. Một ví dụ phổ biến về dữ liệu nhị phân sẽ là hình ảnh hoặc tệp được mã hóa, chẳng hạn như tài liệu PDF

Kiểu dữ liệu

}
67 biến thuộc tính thành trường "bất cứ điều gì xảy ra". Trường này giống với số lượng nhà phát triển có thể sử dụng MongoDB vì không có cấu trúc xác định. Hãy cảnh giác khi sử dụng loại dữ liệu này vì nó làm mất đi nhiều tính năng tuyệt vời mà Mongoose cung cấp, chẳng hạn như xác thực dữ liệu và phát hiện các thay đổi của thực thể để tự động biết để cập nhật thuộc tính khi lưu

Kiểu dữ liệu

}
68 thường chỉ định một liên kết đến một tài liệu khác trong cơ sở dữ liệu của bạn. Ví dụ: nếu bạn có một bộ sưu tập sách và tác giả, tài liệu sách có thể chứa thuộc tính
}
68 đề cập đến tác giả cụ thể của tài liệu

Kiểu dữ liệu

}
69 cho phép bạn lưu trữ các mảng giống JavaScript. Với kiểu dữ liệu Mảng, bạn có thể thực hiện các thao tác mảng JavaScript phổ biến trên chúng, chẳng hạn như đẩy, bật, dịch chuyển, cắt lát, v.v.

Tóm tắt nhanh

Trước khi tiếp tục và tạo một số mã, tôi chỉ muốn tóm tắt lại những gì chúng ta vừa học. MongoDB là một cơ sở dữ liệu cho phép bạn lưu trữ tài liệu với cấu trúc động. Những tài liệu này được lưu trong một bộ sưu tập

Mongoose là một thư viện JavaScript cho phép bạn xác định các lược đồ với dữ liệu được nhập mạnh. Khi một lược đồ được xác định, Mongoose cho phép bạn tạo Mô hình dựa trên một lược đồ cụ thể. Mô hình Mongoose sau đó được ánh xạ tới Tài liệu MongoDB thông qua định nghĩa lược đồ của Mô hình

Khi bạn đã xác định các lược đồ và mô hình của mình, Mongoose chứa nhiều hàm khác nhau cho phép bạn xác thực, lưu, xóa và truy vấn dữ liệu của mình bằng các hàm MongoDB phổ biến. Tôi sẽ nói về điều này nhiều hơn với các ví dụ mã cụ thể để làm theo

Cài đặt MongoDB

Trước khi chúng tôi có thể bắt đầu tạo các lược đồ và mô hình Mongoose của mình, MongoDB phải được cài đặt và định cấu hình. Tôi sẽ đề nghị đến thăm. Có một số tùy chọn khác nhau có sẵn để cài đặt. Tôi đã liên kết với Máy chủ Cộng đồng. Điều này cho phép bạn cài đặt phiên bản dành riêng cho hệ điều hành của mình. MongoDB cũng cung cấp Máy chủ doanh nghiệp và cài đặt hỗ trợ đám mây. Vì có thể viết toàn bộ sách về cách cài đặt, điều chỉnh và giám sát MongoDB, nên tôi sẽ gắn bó với Máy chủ Cộng đồng

Khi bạn đã tải xuống và cài đặt MongoDB cho hệ điều hành bạn chọn, bạn sẽ cần khởi động cơ sở dữ liệu. Thay vì phát minh lại bánh xe, tôi khuyên bạn nên truy cập tài liệu của MongoDB về cách cài đặt MongoDB Community Edition

Tôi sẽ đợi ở đây trong khi bạn định cấu hình MongoDB. Khi bạn đã sẵn sàng, chúng ta có thể chuyển sang thiết lập Mongoose để kết nối với cơ sở dữ liệu MongoDB mới cài đặt của bạn

Thiết lập Mongoose

Mongoose là một khung JavaScript và tôi sẽ sử dụng nó trong một Node. ứng dụng js. Nếu bạn đã có Nút. js được cài đặt, bạn có thể chuyển sang bước tiếp theo. Nếu bạn không có Nút. js, tôi khuyên bạn nên bắt đầu bằng cách truy cập Node. js và chọn trình cài đặt cho hệ điều hành của bạn

với nút. js đã được thiết lập và sẵn sàng hoạt động, tôi sẽ tạo một ứng dụng mới và sau đó cài đặt Gói NPM Mongoose

Với dấu nhắc lệnh được đặt ở nơi bạn muốn cài đặt ứng dụng của mình, bạn có thể chạy các lệnh sau

1
mkdir mongoose_basics
2
{
1
3
{
3

Để khởi tạo ứng dụng của tôi, tôi để mọi thứ làm giá trị mặc định của chúng. Bây giờ tôi sẽ cài đặt gói cầy mangut như sau

1
{
5

Với tất cả các điều kiện tiên quyết được định cấu hình, hãy kết nối với cơ sở dữ liệu MongoDB. Tôi đã đặt đoạn mã sau bên trong một chỉ mục. js vì tôi đã chọn đó làm điểm bắt đầu cho ứng dụng của mình

1
{
7
2
3
2
0

Dòng mã đầu tiên bao gồm thư viện

}
75. Tiếp theo, tôi mở một kết nối tới cơ sở dữ liệu mà tôi đã gọi là
}
76 bằng cách sử dụng hàm
}
77

Hàm

}
77 chấp nhận hai tham số tùy chọn khác. Tham số thứ hai là một đối tượng của các tùy chọn nơi bạn có thể xác định những thứ như tên người dùng và mật khẩu, nếu cần. Tham số thứ ba, cũng có thể là tham số thứ hai nếu bạn không có tùy chọn nào, là chức năng gọi lại sau khi cố gắng kết nối. Chức năng gọi lại có thể được sử dụng theo một trong hai cách

1
2
2_______2_______4_______
2
5
4
2
7
2
8
2
9
  firstName: "Jamie",
0
  firstName: "Jamie",
1
  firstName: "Jamie",
2
  firstName: "Jamie",
3
  firstName: "Jamie",
4
  firstName: "Jamie",
5
  firstName: "Jamie",
6
  firstName: "Jamie",
7
  firstName: "Jamie",
8__
  firstName: "Jamie",
9_______4_______0_______4_______1_______4_______2_______4_______3

Để tránh giới thiệu tiềm năng về Lời hứa JavaScript, tôi sẽ sử dụng cách đầu tiên. Dưới đây là một chỉ số cập nhật. tập tin js

1
{
7
2
3
3
8
4
___
2
7
  lastName: "Munro"
1
2
9
  firstName: "Jamie",
0
  lastName: "Munro"
4
  firstName: "Jamie",
2
  firstName: "Jamie",
3
2
8

Nếu xảy ra lỗi khi kết nối với cơ sở dữ liệu, ngoại lệ sẽ được đưa ra và tất cả quá trình xử lý tiếp theo sẽ bị dừng. Khi không có lỗi xảy ra, tôi đã ghi thông báo thành công vào bảng điều khiển

Mongoose hiện đã được thiết lập và kết nối với cơ sở dữ liệu có tên là

}
76. Kết nối MongoDB của tôi không sử dụng tên người dùng, mật khẩu hoặc cổng tùy chỉnh. Nếu bạn cần đặt các tùy chọn này hoặc bất kỳ tùy chọn nào khác trong khi kết nối, tôi khuyên bạn nên xem lại Tài liệu Mongoose về kết nối. Tài liệu này cung cấp giải thích chi tiết về nhiều tùy chọn có sẵn cũng như cách tạo nhiều kết nối, tổng hợp kết nối, bản sao, v.v.

Với kết nối thành công, hãy chuyển sang xác định Lược đồ Mongoose

Xác định lược đồ Mongoose

Trong phần giới thiệu, tôi đã cho thấy một đối tượng

}
55 chứa hai thuộc tính.
}
59 và
}
60. Trong ví dụ sau, tôi đã dịch tài liệu đó thành Mongoose Schema

1
  lastName: "Munro"
9_______2_______
4
1_______4_______
4
3
4
2
8

Đây là một Lược đồ rất cơ bản chỉ chứa hai thuộc tính không có thuộc tính nào được liên kết với nó. Hãy mở rộng ví dụ này bằng cách chuyển đổi các thuộc tính tên và họ thành các đối tượng con của thuộc tính

}
83. Tài sản
}
83 sẽ bao gồm cả họ và tên. Tôi cũng sẽ thêm thuộc tính
}
85 thuộc loại
}
65

1
  lastName: "Munro"
9_______2_______
4
9_______4_______
}
1
4
7_______3_______2_______7
}
5_______2_______9
}
7
  firstName: "Jamie",
0
2
8

Như bạn có thể thấy, Mongoose cho phép tôi tạo các lược đồ rất linh hoạt với nhiều cách kết hợp khả thi khác nhau về cách tôi có thể tổ chức dữ liệu của mình

Trong ví dụ tiếp theo này, tôi sẽ tạo hai lược đồ mới sẽ trình bày cách tạo mối quan hệ với một lược đồ khác.

}
87 và
}
88. Lược đồ
}
88 sẽ chứa một tham chiếu đến lược đồ
}
87

1
1
1
2
1
3
3
4
9
4
1
7
2
7
1
9
2
9
mkdir mongoose_basics
1
  firstName: "Jamie",
0
mkdir mongoose_basics
3
  firstName: "Jamie",
2
mkdir mongoose_basics
5
  firstName: "Jamie",
3
mkdir mongoose_basics
7
  firstName: "Jamie",
5
mkdir mongoose_basics
9
  firstName: "Jamie",
6
{
01
  firstName: "Jamie",
8
{
03
  firstName: "Jamie",
9
{
05
3
1
{
07
3
2
{
09
{
10
2
8

Trên đây là lược đồ

}
87 mở rộng dựa trên các khái niệm của lược đồ 
}
55 mà tôi đã tạo trong ví dụ trước. Để liên kết Tác giả và Sách với nhau, thuộc tính đầu tiên của lược đồ
}
87 là thuộc tính
}
94 thuộc loại lược đồ
}
68.
}
94 là cú pháp phổ biến để tạo khóa chính trong Mongoose và MongoDB. Sau đó, giống như lược đồ
}
55, tôi đã xác định một thuộc tính
}
83 chứa họ và tên của tác giả.  

Mở rộng dựa trên lược đồ

}
55,
}
87 chứa một số loại lược đồ
}
63 khác. Tôi cũng đã thêm một loại lược đồ
}
66 có thể chứa ảnh hồ sơ của tác giả. Thuộc tính cuối cùng chứa ngày tạo của tác giả; . Khi một tác giả được duy trì trong cơ sở dữ liệu, thuộc tính này sẽ được đặt thành ngày/giờ hiện tại

Để hoàn thành các ví dụ về lược đồ, hãy tạo một lược đồ

}
88 chứa tham chiếu đến tác giả bằng cách sử dụng loại lược đồ
}
68

1
{
13
2
1
3
3
{
17
4
{
19
2
7
{
21
2
9
{
23
  firstName: "Jamie",
0
{
25
  firstName: "Jamie",
2
{
27
  firstName: "Jamie",
3
{
29
  firstName: "Jamie",
5
}
5
  firstName: "Jamie",
6
{
33
  firstName: "Jamie",
8
{
35
  firstName: "Jamie",
9
{
37
3
1
{
39
3
2
{
41
{
10
{
43
{
44
{
45
{
46
{
47
{
48
{
49
{
50
{
51
{
52
{
53
{
54
{
03
{
56
{
05
{
58
{
07
{
60
{
09
{
62
2
8

Lược đồ

}
88 chứa một số thuộc tính kiểu
}
63. Như đã đề cập ở trên, nó chứa một tham chiếu đến lược đồ
}
87. Để chứng minh thêm các định nghĩa lược đồ mạnh mẽ, lược đồ
}
88 cũng chứa một
}
69 của
1
10. Mỗi xếp hạng bao gồm một thuộc tính ngày tháng
1
11,
1
12,
1
13, và
}
85

Mongoose cho phép bạn linh hoạt tạo các lược đồ có tham chiếu đến các lược đồ khác hoặc, như trong ví dụ trên với thuộc tính

1
10, nó cho phép bạn tạo một
}
69 thuộc tính con có thể được chứa trong một lược đồ liên quan (như sách cho tác giả) hoặc

Tạo và lưu các mô hình Mongoose

Vì các lược đồ

}
87 và
}
88 thể hiện tính linh hoạt của lược đồ Mongoose, tôi sẽ tiếp tục sử dụng các lược đồ đó và rút ra một mô hình
1
20 và ________0____21 từ chúng

1
{
65_______2_______
3
{
68

Mô hình Mongoose, khi được lưu, sẽ tạo Tài liệu trong MongoDB với các thuộc tính như được xác định bởi lược đồ mà nó được lấy từ đó

Để chứng minh việc tạo và lưu một đối tượng, trong ví dụ tiếp theo này, tôi sẽ tạo một số đối tượng. một

1
20 Mô hình và một số
1
21 Mô hình. Sau khi được tạo, các đối tượng này sẽ được duy trì trong MongoDB bằng cách sử dụng phương thức
1
24 của Mô hình

1
{
70
2
{
72
3
4
9
4
{
76
2
7
{
78
2
9
}
5
  firstName: "Jamie",
0
{
82
  firstName: "Jamie",
2
{
84
  firstName: "Jamie",
3
{
86
  firstName: "Jamie",
5
{
88
  firstName: "Jamie",
6
  firstName: "Jamie",
8
{
91
  firstName: "Jamie",
9
{
93
3
1
{
95
3
2
{
97
{
10
{
95
{
44
2
01
{
46
2
03
{
48
2
05
{
50
2
07
{
52
2
09
{
54
2
11
{
56
2
13
{
58
2
15
{
60
{
95
{
62
2
19
2
20
2
21
2
22
{
95
2
24________2____

Trong ví dụ trên, tôi đã vô tình chèn tham chiếu đến hai cuốn sách gần đây nhất của mình. Ví dụ bắt đầu bằng cách tạo và lưu một

1
25 được tạo từ một Mô hình
1
20. Bên trong hàm
1
24 của
1
25, nếu xảy ra lỗi, ứng dụng sẽ xuất ra một ngoại lệ. Khi lưu thành công, bên trong hàm
1
24, hai đối tượng sách được tạo và lưu. Tương tự như
1
25, nếu xảy ra lỗi khi lưu, sẽ xuất ra lỗi;

Để tạo tham chiếu đến Tác giả, các đối tượng cuốn sách đều tham chiếu đến khóa chính

}
94 của lược đồ
}
87 trong thuộc tính
}
87 của lược đồ
}
88

Xác thực dữ liệu trước khi lưu

Điều khá phổ biến là dữ liệu cuối cùng sẽ tạo ra một mô hình được điền vào một biểu mẫu trên trang web. Do đó, bạn nên xác thực dữ liệu này trước khi lưu Mô hình vào MongoDB

Trong ví dụ tiếp theo này, tôi đã cập nhật lược đồ tác giả trước đó để thêm xác thực cho các thuộc tính sau.

}
59,
1
36,
1
37 và
1
38

1
1
1
2
1
3
3
4
9
4
2
61
2
7
2
63
2
9
2
65
  firstName: "Jamie",
0
2
67
  firstName: "Jamie",
2
2
69
  firstName: "Jamie",
3
mkdir mongoose_basics
1
  firstName: "Jamie",
5
2
73
  firstName: "Jamie",
6
2
75
  firstName: "Jamie",
8
2
77
  firstName: "Jamie",
9
2
79
3
1
2
81
3
2
2
83
{
10
2
85
{
44
2
87
{
46
2
89
{
48
mkdir mongoose_basics
1
{
50
2
93
{
52
2
77
{
54
2
79
{
56
2
81
{
58
  firstName: "Jamie",
01
{
60
2
85
{
62
  firstName: "Jamie",
05
2
20
2
89
2
22
mkdir mongoose_basics
1________2_____

Tài sản

}
59 đã được quy cho tài sản
1
40. Bây giờ khi tôi gọi hàm
1
24, Mongoose sẽ trả về lỗi với thông báo cho biết thuộc tính
}
59 là bắt buộc. Tôi đã chọn không yêu cầu thuộc tính
}
60 trong trường hợp Cher hoặc Madonna là tác giả trong cơ sở dữ liệu của tôi

Tất cả các thuộc tính

1
36,
1
37 và
1
38 đều áp dụng các trình xác thực tùy chỉnh rất giống nhau. Mỗi người đều đảm bảo rằng các giá trị bắt đầu bằng tên miền tương ứng của mạng xã hội. Các trường này không bắt buộc, vì vậy trình xác thực sẽ chỉ được áp dụng khi dữ liệu được cung cấp cho thuộc tính đó

Tìm kiếm và cập nhật dữ liệu

Phần giới thiệu về Mongoose sẽ không hoàn chỉnh nếu không có ví dụ về tìm kiếm bản ghi và cập nhật một hoặc nhiều thuộc tính trên đối tượng đó

Mongoose cung cấp một số hàm khác nhau để tìm dữ liệu cho một Model cụ thể. Các chức năng là 

1
47,
1
48 và
1
49

Các hàm

1
47 và
1
48 đều chấp nhận một đối tượng làm đầu vào cho phép tìm kiếm phức tạp, trong khi đó 
1
49 chỉ chấp nhận một giá trị duy nhất với hàm gọi lại (một ví dụ sẽ sớm được đưa ra sau đây). Trong ví dụ tiếp theo này, tôi sẽ trình bày cách tìm tất cả các sách có chứa chuỗi "mvc" trong tiêu đề của chúng

1
  firstName: "Jamie",
41_______2_______
  firstName: "Jamie",
43_______4__________
  firstName: "Jamie",
45
4
1_______93
2
7
{
95
2
9
  firstName: "Jamie",
51
  firstName: "Jamie",
0
2
8

Bên trong hàm

1
47, tôi đang tìm kiếm chuỗi phân biệt chữ hoa chữ thường "mvc" trên thuộc tính
1
54. Điều này được thực hiện bằng cách sử dụng cùng một cú pháp để tìm kiếm một chuỗi bằng JavaScript

Lệnh gọi hàm find cũng được liên kết với các phương thức truy vấn khác, chẳng hạn như 

1
55,
1
56,
1
57,
1
58, ________0____59, ________0____60, v.v.

Hãy mở rộng dựa trên ví dụ trước để giới hạn kết quả của chúng tôi trong 5 cuốn sách đầu tiên và sắp xếp theo ngày tạo giảm dần. Điều này sẽ trả về năm cuốn sách gần đây nhất có chứa "mvc" trong tiêu đề

1
  firstName: "Jamie",
41
2
  firstName: "Jamie",
43_______4__________
  firstName: "Jamie",
59
4
3_______61
2
7
  firstName: "Jamie",
63
2
9
{
93
  firstName: "Jamie",
0
{
95
  firstName: "Jamie",
2
  firstName: "Jamie",
51
  firstName: "Jamie",
3
2
8

Sau khi áp dụng hàm

1
47, thứ tự của các hàm khác không quan trọng vì tất cả các hàm được xâu chuỗi được biên dịch cùng nhau thành một truy vấn duy nhất và không được thực thi cho đến khi hàm ________0____62 được gọi

Như tôi đã đề cập trước đó,

1
49 được thực thi hơi khác một chút. Nó thực thi ngay lập tức và chấp nhận chức năng gọi lại, thay vì cho phép một chuỗi chức năng. Trong ví dụ tiếp theo này, tôi đang truy vấn một tác giả cụ thể bằng
}
94 của họ

1
  firstName: "Jamie",
73_______2_______
  firstName: "Jamie",
75
3
___
  firstName: "Jamie",
77
4
3_______79
2
7
2
8

}
94 trong trường hợp của bạn có thể hơi khác một chút. Tôi đã sao chép
}
94 này từ một
1
67 trước đó khi tìm danh sách sách có "mvc" trong tiêu đề của chúng

Khi một đối tượng đã được trả lại, bạn có thể sửa đổi bất kỳ thuộc tính nào của nó để cập nhật nó. Khi bạn đã thực hiện các thay đổi cần thiết, bạn gọi phương thức

1
24, giống như khi bạn tạo đối tượng. Trong ví dụ tiếp theo này, tôi sẽ mở rộng ví dụ
1
69 và cập nhật thuộc tính
1
38 trên tác giả

1
  firstName: "Jamie",
73
2
{
93_______4__________
{
95
4
3_______89
2
7
{
95
2
9
  firstName: "Jamie",
93
  firstName: "Jamie",
0
2
21
  firstName: "Jamie",
2
  firstName: "Jamie",
97
  firstName: "Jamie",
3
  firstName: "Jamie",
99_______3_______5_______2_______27_______3_______8_______8

Sau khi tác giả được truy xuất thành công, thuộc tính

1
38 được đặt và hàm
1
24 được gọi. Mongoose có thể phát hiện ra rằng thuộc tính
1
38 đã bị thay đổi và nó sẽ gửi một câu lệnh cập nhật tới MongoDB chỉ trên các thuộc tính đã được sửa đổi. Nếu xảy ra lỗi khi lưu, một ngoại lệ sẽ được đưa ra và sẽ tạm dừng ứng dụng. Khi thành công, một thông báo thành công được ghi vào bảng điều khiển

Mongoose cũng cung cấp hai chức năng bổ sung giúp tìm và lưu đối tượng trong một bước duy nhất với các chức năng được đặt tên phù hợp.

1
74 và
1
75. Hãy cập nhật ví dụ trước để sử dụng
1
74

1
3
05_______2_______
3
07_______4__________
3
09_______6_______4_______11
2
7
{
95
2
9
3
15
  firstName: "Jamie",
0
2
8

Trong ví dụ trước, các thuộc tính cần cập nhật được cung cấp dưới dạng đối tượng cho tham số thứ hai của hàm

1
74. Hàm gọi lại hiện là tham số thứ ba. Khi cập nhật thành công, đối tượng
}
87 trả về chứa thông tin đã cập nhật. Điều này được ghi vào bảng điều khiển để xem các thuộc tính của tác giả được cập nhật

Mã mẫu cuối cùng

Trong suốt bài viết này, tôi đã cung cấp các đoạn mã nhỏ xác định một hành động rất cụ thể, chẳng hạn như tạo lược đồ, tạo mô hình, v.v. Hãy đặt tất cả lại với nhau trong một ví dụ đầy đủ.  

Đầu tiên, tôi đã tạo hai tệp bổ sung.

1
79 và
1
80. Các tệp này chứa các định nghĩa lược đồ tương ứng và việc tạo mô hình. Dòng mã cuối cùng làm cho mô hình có sẵn để sử dụng trong tệp
1
81

Hãy bắt đầu với tác giả. tập tin js

1
{
7
2
3
1
1
4
1
3
2
7
4
9
2
9
2
61
  firstName: "Jamie",
0
2
63
  firstName: "Jamie",
2
2
65
  firstName: "Jamie",
3
2
67
  firstName: "Jamie",
5
2
69
  firstName: "Jamie",
6
mkdir mongoose_basics
1
  firstName: "Jamie",
8
2
73
  firstName: "Jamie",
9
2
75
3
1
2
77
3
2
2
79
{
10
2
81
{
44
2
83
{
46
2
85
{
48
2
87
{
50
2
89
{
52
mkdir mongoose_basics
1
{
54
2
93
{
56
2
77
{
58
2
79
{
60
2
81
{
62
  firstName: "Jamie",
01
2
20
2
85
2
22
  firstName: "Jamie",
05
2
24________2______

Tiếp đến là tệp

1
80

1
{
7
2
3
{
13
4
1
3
2
7
{
17
2
9
  lastName: "Munro"
23
  firstName: "Jamie",
0
  lastName: "Munro"
25
  firstName: "Jamie",
2
  lastName: "Munro"
27
  firstName: "Jamie",
3
  lastName: "Munro"
29
  firstName: "Jamie",
5
  lastName: "Munro"
31
  firstName: "Jamie",
6
  lastName: "Munro"
33
  firstName: "Jamie",
8
mkdir mongoose_basics
1
  firstName: "Jamie",
9
  lastName: "Munro"
37
3
1
  lastName: "Munro"
39
3
2
  lastName: "Munro"
41
{
10
  lastName: "Munro"
43
{
44
  lastName: "Munro"
45
{
46
  lastName: "Munro"
47
{
48
  lastName: "Munro"
49
{
50
  lastName: "Munro"
51
{
52
  lastName: "Munro"
53
{
54
2
89
{
56
  lastName: "Munro"
57
{
58
  firstName: "Jamie",
31
{
60
  firstName: "Jamie",
33
{
62
  firstName: "Jamie",
35
2
20
  firstName: "Jamie",
37
2
22
2
8
2
24________2_____

Và cuối cùng, tệp

1
81 được cập nhật

1
{
7
2
3
  lastName: "Munro"
78
4
  lastName: "Munro"
80
2
7
2
9
3
8
  firstName: "Jamie",
0
  firstName: "Jamie",
75
  firstName: "Jamie",
2
{
95
  firstName: "Jamie",
3
  lastName: "Munro"
89
  firstName: "Jamie",
5
{
95
  firstName: "Jamie",
6
  lastName: "Munro"
93
  firstName: "Jamie",
8
  lastName: "Munro"
95
  firstName: "Jamie",
9
  lastName: "Munro"
97
3
1
  lastName: "Munro"
99
3
2
4
01
{
10
2
67
{
44
4
05
{
46
4
07
{
48
4
09
{
50
2
27
{
52
{
54
4
14
{
56
2
21
{
58
  firstName: "Jamie",
97
{
60
4
20
{
62
  firstName: "Jamie",
97
2
20
4
24
2
22
4
26
2
24
4
28
2
26________6____

Trong ví dụ trên, tất cả các hành động của Mongoose được chứa trong hàm

}
77. Các tệp
}
87 và
}
88 được bao gồm trong hàm
1
87 sau khi bao gồm thư viện
}
75

Với MongoDB đang chạy, bây giờ bạn có thể chạy Node hoàn chỉnh. ứng dụng js bằng lệnh sau

1
4
80

Sau khi tôi lưu một số dữ liệu vào cơ sở dữ liệu của mình, tôi đã cập nhật tệp

1
81 với các hàm tìm kiếm như sau

1
{
7
2
3
  lastName: "Munro"
78
4
  lastName: "Munro"
80
2
7
2
9
3
8
  firstName: "Jamie",
0
  firstName: "Jamie",
75
  firstName: "Jamie",
2
{
95
  firstName: "Jamie",
3
  lastName: "Munro"
89
  firstName: "Jamie",
5
{
95
  firstName: "Jamie",
6
}
00
  firstName: "Jamie",
8
}
02
  firstName: "Jamie",
9
}
04
3
1
}
06
3
2
}
08
{
10
2
21
{
44
  firstName: "Jamie",
97
{
46
}
14
{
48
2
27
{
50
{
95
{
52
}
20
{
54
2
21
{
56
  firstName: "Jamie",
97
{
58
}
26
{
60
  firstName: "Jamie",
97
{
62
}
30
2
20
4
44
2
22
}
34
2
24
}
36________2____

Một lần nữa, bạn có thể chạy ứng dụng bằng lệnh.

1
90

Tóm lược

Sau khi đọc bài viết này, bạn sẽ có thể tạo các Mô hình và Lược đồ Mongoose cực kỳ linh hoạt, áp dụng xác thực đơn giản hoặc phức tạp, tạo và cập nhật tài liệu và cuối cùng là tìm kiếm các tài liệu đã được tạo

Hy vọng rằng bây giờ bạn cảm thấy thoải mái khi sử dụng Mongoose. Nếu bạn đang muốn tìm hiểu thêm, tôi khuyên bạn nên xem lại Hướng dẫn Mongoose đi sâu vào các chủ đề nâng cao hơn như dân số, phần mềm trung gian, lời hứa, v.v.

NPM Mongoose được sử dụng để làm gì?

Mongoose là thư viện Mô hình hóa dữ liệu đối tượng (ODM) cho MongoDB và Node. js. Nó quản lý các mối quan hệ giữa dữ liệu, cung cấp xác thực lược đồ và được sử dụng để dịch giữa các đối tượng trong mã và biểu diễn của các đối tượng đó trong MongoDB .

Lược đồ Mongoose trong nút JS là gì?

Lược đồ Mongoose xác định cấu trúc của tài liệu, giá trị mặc định, trình xác thực, v.v. . , trong khi mô hình Mongoose cung cấp giao diện cho cơ sở dữ liệu để tạo, truy vấn, cập nhật, xóa bản ghi, v.v.

Tại sao Mongoose được sử dụng trong phụ trợ?

Mongoose cho phép chúng tôi. ánh xạ các thuộc tính và yêu cầu của mô hình tới cơ sở dữ liệu, tạo các bộ sưu tập và tài liệu mới trong cơ sở dữ liệu của chúng tôi, đồng thời thực hiện các truy vấn để truy xuất thông tin từ cơ sở dữ liệu .

Mongoose JS có phải là một khung không?

Mongoose là một khung JavaScript thường được sử dụng trong Nút. js với cơ sở dữ liệu MongoDB.