Thông báo quan trọng. để thực hiện các truy vấn sẵn sàng sản xuất với Phần tiếp theo, hãy đảm bảo bạn cũng đã đọc hướng dẫn về Giao dịch. Giao dịch rất quan trọng để đảm bảo tính toàn vẹn của dữ liệu và cung cấp các lợi ích khác Hướng dẫn này sẽ chỉ ra cách thực hiện các truy vấn CRUD tiêu chuẩn Truy vấn INSERT đơn giảnĐầu tiên, một ví dụ đơn giản // Create a new user const jane = await User.create({ firstName: "Jane", lastName: "Doe" }); console.log("Jane's auto-generated ID:", jane.id);
Phương thức này là cách viết tắt để xây dựng một phiên bản chưa được lưu và lưu phiên bản đó với Cũng có thể xác định thuộc tính nào có thể được đặt trong phương thức Model.findAll({ attributes: ['foo', 'bar'] });
5. Điều này có thể đặc biệt hữu ích nếu bạn tạo các mục nhập cơ sở dữ liệu dựa trên biểu mẫu mà người dùng có thể điền vào. Ví dụ: sử dụng điều đó sẽ cho phép bạn hạn chế mô hình Model.findAll({ attributes: ['foo', 'bar'] });
6 chỉ đặt tên người dùng chứ không đặt cờ quản trị viên (tôi. e. , Model.findAll({ attributes: ['foo', 'bar'] });
7)const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
Truy vấn CHỌN đơn giảnBạn có thể đọc toàn bộ bảng từ cơ sở dữ liệu bằng phương thức // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
SELECT * FROM ...
Chỉ định các thuộc tính cho các truy vấn CHỌNĐể chỉ chọn một số thuộc tính, bạn có thể sử dụng tùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
9Model.findAll({ attributes: ['foo', 'bar'] });
SELECT foo, bar FROM ...
Các thuộc tính có thể được đổi tên bằng cách sử dụng một mảng lồng nhau Model.findAll({ attributes: ['foo', 'bar'] });
0
Model.findAll({ attributes: ['foo', 'bar'] });
1
Bạn có thể sử dụng để làm tập hợp Model.findAll({ attributes: ['foo', 'bar'] });
2
Model.findAll({ attributes: ['foo', 'bar'] });
3
Khi sử dụng chức năng tổng hợp, bạn phải đặt cho nó một bí danh để có thể truy cập nó từ mô hình. Trong ví dụ trên, bạn có thể lấy số lượng mũ bằng SELECT foo, bar FROM ...
1Đôi khi việc liệt kê tất cả các thuộc tính của mô hình có thể gây mệt mỏi nếu bạn chỉ muốn thêm một tập hợp const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
0
const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
1
Tương tự, cũng có thể loại bỏ một số thuộc tính đã chọn const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
2
const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
3
Áp dụng mệnh đề WHERETùy chọn SELECT foo, bar FROM ...
2 được sử dụng để lọc truy vấn. Có rất nhiều toán tử để sử dụng cho mệnh đề SELECT foo, bar FROM ...
2, có sẵn dưới dạng Ký hiệu từNhững thứ cơ bảnconst user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
4
Quan sát rằng không có toán tử nào (từ SELECT foo, bar FROM ...
4) được thông qua một cách rõ ràng, vì vậy Sequelize mặc định mặc định so sánh đẳng thức. Đoạn mã trên tương đương vớiconst user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
5
Nhiều kiểm tra có thể được thông qua const user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
6
Giống như Sequelize đã suy ra toán tử SELECT foo, bar FROM ...
6 trong ví dụ đầu tiên, ở đây Sequelize đã suy ra rằng người gọi muốn có một SELECT foo, bar FROM ...
7 cho hai lần kiểm tra. Đoạn mã trên tương đương vớiconst user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
7
Có thể dễ dàng thực hiện một SELECT foo, bar FROM ...
8 theo cách tương tựconst user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
8
Vì ở trên là một SELECT foo, bar FROM ...
8 liên quan đến cùng một trường, Sequelize cho phép bạn sử dụng một cấu trúc hơi khác, dễ đọc hơn và tạo ra cùng một hành viconst user = await User.create({ username: 'alice123', isAdmin: true }, { fields: ['username'] }); // let's assume the default of isAdmin is false console.log(user.username); // 'alice123' console.log(user.isAdmin); // false
9
nhà điều hànhSequelize cung cấp một số toán tử // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
0
Cú pháp viết tắt của Model.findAll({ attributes: ['foo', 'bar'] });
00Truyền một mảng trực tiếp vào tùy chọn SELECT foo, bar FROM ...
2 sẽ ngầm sử dụng toán tử Model.findAll({ attributes: ['foo', 'bar'] });
02// Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
1
Kết hợp logic với toán tửCác toán tử Model.findAll({ attributes: ['foo', 'bar'] });
03, Model.findAll({ attributes: ['foo', 'bar'] });
04 và Model.findAll({ attributes: ['foo', 'bar'] });
05 có thể được sử dụng để tạo các phép so sánh logic lồng nhau phức tạp tùy ýVí dụ với Model.findAll({ attributes: ['foo', 'bar'] });
03 và Model.findAll({ attributes: ['foo', 'bar'] });
04// Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
2
Ví dụ với Model.findAll({ attributes: ['foo', 'bar'] });
05// Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
3
Ở trên sẽ tạo ra // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
4
Truy vấn nâng cao với hàm (không chỉ cột)Điều gì sẽ xảy ra nếu bạn muốn lấy thứ gì đó như Model.findAll({ attributes: ['foo', 'bar'] });
09?// Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
5
Lưu ý cách sử dụng các phương thức và, nên được sử dụng để chỉ định một lệnh gọi hàm SQL và một cột trong bảng tương ứng. Các phương pháp này nên được sử dụng thay vì chuyển một chuỗi đơn giản (chẳng hạn như Model.findAll({ attributes: ['foo', 'bar'] });
12) vì Sequelize cần xử lý tình huống này theo cách khác (ví dụ: sử dụng các phương pháp thoát ký hiệu khác)Điều gì nếu bạn cần một cái gì đó phức tạp hơn? // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
6
Ở trên tạo ra SQL sau // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
7
Toán tử phạm vi chỉ dành cho PostgresCác loại phạm vi có thể được truy vấn với tất cả các toán tử được hỗ trợ Hãy ghi nhớ, giá trị phạm vi được cung cấp cũng có thể // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
8
không dùng nữa. bí danh nhà điều hànhTrong Sequelize v4, có thể chỉ định các chuỗi để chỉ các toán tử, thay vì sử dụng Ký hiệu. Điều này hiện không được dùng nữa và không được khuyến khích nhiều và có thể sẽ bị xóa trong phiên bản chính tiếp theo. Nếu bạn thực sự cần nó, bạn có thể chuyển tùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
13 trong hàm tạo SequelizeVí dụ // Find all users const users = await User.findAll(); console.log(users.every(user => user instanceof User)); // true console.log("All users:", JSON.stringify(users, null, 2));
9
Truy vấn CẬP NHẬT đơn giảnTruy vấn cập nhật cũng chấp nhận tùy chọn SELECT foo, bar FROM ...
2, giống như truy vấn đọc được hiển thị ở trênSELECT * FROM ...
0
Các truy vấn XÓA đơn giảnTruy vấn xóa cũng chấp nhận tùy chọn SELECT foo, bar FROM ...
2, giống như truy vấn đọc được hiển thị ở trênSELECT * FROM ...
1
Để hủy mọi thứ, có thể sử dụng SQL Model.findAll({ attributes: ['foo', 'bar'] });
16SELECT * FROM ...
2
Tạo hàng loạtSequelize cung cấp phương thức Model.findAll({ attributes: ['foo', 'bar'] });
17 cho phép tạo nhiều bản ghi cùng lúc, chỉ với một truy vấnCách sử dụng của Model.findAll({ attributes: ['foo', 'bar'] });
17 rất giống với Model.findAll({ attributes: ['foo', 'bar'] });
19, bằng cách nhận một mảng các đối tượng thay vì một đối tượng duy nhấtSELECT * FROM ...
3
Tuy nhiên, theo mặc định, Model.findAll({ attributes: ['foo', 'bar'] });
20 không chạy xác thực trên từng đối tượng sẽ được tạo (điều mà Model.findAll({ attributes: ['foo', 'bar'] });
5 thực hiện). Để làm cho Model.findAll({ attributes: ['foo', 'bar'] });
20 cũng chạy các xác thực này, bạn phải vượt qua tùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
23. Điều này sẽ làm giảm hiệu suất. Ví dụ sử dụngSELECT * FROM ...
4
Nếu bạn đang chấp nhận các giá trị trực tiếp từ người dùng, có thể hữu ích khi giới hạn các cột mà bạn thực sự muốn chèn. Để hỗ trợ điều này, Model.findAll({ attributes: ['foo', 'bar'] });
24 chấp nhận tùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
25, một mảng xác định trường nào phải được xem xét (phần còn lại sẽ bị bỏ qua)SELECT * FROM ...
5
Đặt hàng và nhómSequelize cung cấp các tùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
26 và Model.findAll({ attributes: ['foo', 'bar'] });
27 để làm việc với Model.findAll({ attributes: ['foo', 'bar'] });
28 và Model.findAll({ attributes: ['foo', 'bar'] });
29đặt hàngTùy chọn Model.findAll({ attributes: ['foo', 'bar'] });
26 lấy một mảng các mục để sắp xếp truy vấn theo hoặc phương thức sắp xếp lại. Bản thân các mục này là các mảng có dạng Model.findAll({ attributes: ['foo', 'bar'] });
31. Cột sẽ được thoát chính xác và hướng sẽ được kiểm tra trong danh sách trắng gồm các hướng hợp lệ (chẳng hạn như Model.findAll({ attributes: ['foo', 'bar'] });
32, Model.findAll({ attributes: ['foo', 'bar'] });
33, Model.findAll({ attributes: ['foo', 'bar'] });
34, v.v.)SELECT * FROM ...
6
Tóm lại, các phần tử của mảng thứ tự có thể như sau - Một chuỗi (sẽ được trích dẫn tự động)
- Một mảng, có phần tử đầu tiên sẽ được trích dẫn, phần tử thứ hai sẽ được thêm vào nguyên văn
- Một đối tượng có trường
Model.findAll({ attributes: ['foo', 'bar'] });
35 - Một lệnh gọi tới
Model.findAll({ attributes: ['foo', 'bar'] });
37 (sẽ tạo ra một lệnh gọi hàm trong SQL) - Một cuộc gọi đến
Model.findAll({ attributes: ['foo', 'bar'] });
38 (sẽ trích dẫn tên cột)
nhómCú pháp để nhóm và sắp xếp giống nhau, ngoại trừ việc nhóm không chấp nhận hướng làm đối số cuối cùng của mảng (không có Model.findAll({ attributes: ['foo', 'bar'] });
32, Model.findAll({ attributes: ['foo', 'bar'] });
33, Model.findAll({ attributes: ['foo', 'bar'] });
34, v.v.)Bạn cũng có thể chuyển trực tiếp một chuỗi tới Model.findAll({ attributes: ['foo', 'bar'] });
27, chuỗi này sẽ được đưa trực tiếp (nguyên văn) vào SQL được tạo. Thận trọng khi sử dụng và không sử dụng với nội dung do người dùng tạo
Làm cách nào để tạo phân trang trong NodeJS?
2. 2. 1 Thiết lập phụ thuộc. Điều hướng đến thư mục dự án và chạy npm init -y để tạo gói. tập tin json. . 2. 2. 2 Tạo tệp chỉ mục. Thêm mã vào tệp chỉ mục sẽ bao gồm các điểm cuối API để hiểu chi tiết về phân trang
Phân trang hoạt động như thế nào trong nút JS?
Phân trang trong NodeJS được định nghĩa là thêm các số để xác định số thứ tự của các trang . Trong phân trang, chúng tôi đã từng bỏ qua và giới hạn để giảm kích thước dữ liệu trong cơ sở dữ liệu khi chúng có số lượng rất lớn.
Phân trang phía máy chủ hoạt động như thế nào?
Phân trang phía máy chủ yêu cầu tải từng trang riêng lẻ khi điều hướng . Máy chủ cần hỗ trợ phân trang và sau đó phía máy khách có thể yêu cầu các bộ dữ liệu với kích thước trang, chỉ mục trang được chỉ định và có thể sắp xếp thứ tự và tiêu chí lọc. |