MongoDB Truy vấn Sort() & Limit() theo thứ tự ví dụ

⚡ Tóm tắt thông minh

MongoDB Các bộ điều chỉnh truy vấn Sort() và Limit() kiểm soát số lượng tài liệu mà một truy vấn trả về và thứ tự hiển thị. Phương thức limit() giới hạn số lượng kết quả, trong khi sort() sắp xếp các tài liệu theo thứ tự tăng dần hoặc giảm dần bằng cách sử dụng các giá trị 1 hoặc -1.

  • 🔢 Giới hạn kết quả: Phương thức limit() giới hạn số lượng tài liệu mà một truy vấn trả về, ví dụ limit(2) trả về hai bản ghi.
  • ⬇️ Sắp xếp giảm dần: sort({field:-1}) trả về các tài liệu theo thứ tự giảm dần của trường đã chọn.
  • ⬆️ Sắp xếp tăng dần: sort({field:1}) trả về các tài liệu theo thứ tự tăng dần, đây cũng là hướng mặc định.
  • ⏭️ Bỏ qua để xem phân trang: Phương thức skip() bỏ qua một số lượng tài liệu nhất định, và khi kết hợp với limit(), nó tạo ra phân trang.
  • 🧷 Nhiều phím: Hàm sort() chấp nhận nhiều trường, sắp xếp theo khóa đầu tiên và giải quyết các trường hợp trùng lặp bằng khóa tiếp theo.
  • 🖨️ Readable Đầu ra: Chuỗi lệnh forEach(printjson) sẽ in từng tài liệu được trả về dưới dạng JSON sạch.

MongoDB Truy vấn Sort() & Limit()

Sửa đổi truy vấn là gì?

Mongo DB cung cấp các trình sửa đổi truy vấn như mệnh đề 'limit' và 'Orders' để cung cấp tính linh hoạt hơn khi thực hiện truy vấn. Chúng ta sẽ xem xét các trình sửa đổi truy vấn sau

MongoDB Giới hạn kết quả truy vấn

Trình sửa đổi này được sử dụng để giới hạn số lượng tài liệu được trả về trong tập kết quả cho một truy vấn. Ví dụ sau đây cho thấy cách thực hiện điều này.

db.Employee.find().limit(2).forEach(printjson);

Code Giải thích

  • Đoạn mã trên sử dụng hàm find trả về tất cả tài liệu trong bộ sưu tập nhưng sau đó sử dụng mệnh đề giới hạn để giới hạn số lượng tài liệu được trả về chỉ còn 2.

Đầu ra

Nếu lệnh được thực hiện thành công, Đầu ra sau sẽ được hiển thị

MongoDB Giới hạn kết quả truy vấn

Kết quả đầu ra cho thấy rõ ràng rằng vì có công cụ sửa đổi giới hạn nên nhiều nhất chỉ có 2 bản ghi được trả về như một phần của tập kết quả dựa trên ObjectId theo thứ tự tăng dần.

MongoDB Sắp xếp theo thứ tự giảm dần

Người ta có thể chỉ định thứ tự các tài liệu được trả về dựa trên thứ tự tăng dần hoặc giảm dần của bất kỳ khóa nào trong bộ sưu tập. Ví dụ sau đây cho thấy cách thực hiện điều này.

db.Employee.find().sort({Employeeid:-1}).forEach(printjson)

Code Giải thích

  • Đoạn mã trên sử dụng hàm sắp xếp trả về tất cả tài liệu trong bộ sưu tập nhưng sau đó sử dụng công cụ sửa đổi để thay đổi thứ tự trả về các bản ghi. Ở đây -1 chỉ ra rằng chúng tôi muốn trả lại tài liệu dựa trên thứ tự giảm dần của ID nhân viên.

Nếu lệnh được thực hiện thành công, Đầu ra sau sẽ được hiển thị

Đầu ra

MongoDB Sắp xếp theo thứ tự giảm dần

Kết quả đầu ra hiển thị rõ ràng các tài liệu được trả về theo thứ tự giảm dần của Mã nhân viên.

Thứ tự tăng dần được xác định bởi giá trị 1.

MongoDB Sắp xếp theo thứ tự tăng dần

Tương tự như cách hàm sort() có thể trả về các tài liệu theo thứ tự giảm dần, nó cũng có thể trả về chúng theo thứ tự tăng dần. Thứ tự tăng dần được xác định bởi giá trị 1 trong đối tượng sort. Điều này sắp xếp các tài liệu từ giá trị nhỏ nhất đến lớn nhất, rất hữu ích khi liệt kê các bản ghi từ cũ nhất đến mới nhất hoặc từ A đến Z.

Ví dụ sau sắp xếp tất cả các tài liệu nhân viên theo EmployeeID theo thứ tự tăng dần:

db.Employee.find().sort({Employeeid:1}).forEach(printjson)

Cách thức truy vấn hoạt động như sau:

  • Hàm find() truy xuất tất cả các tài liệu trong bộ sưu tập Employee.
  • sort({Employeeid:1}) sắp xếp kết quả theo trường Employeeid, từ ID thấp nhất đến cao nhất.
  • forEach(printjson) in từng tài liệu dưới dạng JSON dễ đọc.

Khi bạn chạy lệnh này, các tài liệu sẽ xuất hiện theo thứ tự tăng dần của Employeeid. Thứ tự tăng dần cũng là thứ tự mặc định, vì vậy nếu để giá trị là 1 thì sẽ hiển thị thứ tự từ thấp đến cao theo trường đã chọn. Để đảo ngược kết quả, chỉ cần thay đổi giá trị từ 1 thành -1, và bạn cũng có thể sử dụng hàm limit() để chỉ trả về một vài bản ghi được sắp xếp đầu tiên.

MongoDB Skip() để phân trang

Phương thức skip() cho biết MongoDB Hàm `skip()` bỏ qua một số lượng tài liệu nhất định trước khi trả về phần còn lại. Bản thân `skip()` hiếm khi hữu ích, nhưng khi kết hợp với `limit()`, nó tạo ra phân trang, cho phép bạn hiển thị kết quả từng trang một.

Ví dụ sau bỏ qua hai nhân viên đầu tiên và trả về hai nhân viên tiếp theo:

db.Employee.find().skip(2).limit(2).forEach(printjson)

Để xây dựng hệ thống điều hướng từng trang, hãy làm theo mẫu sau:

  1. Hãy quyết định kích thước trang, ví dụ: 2 tài liệu trên một trang.
  2. Nhân kích thước trang với số trang trừ đi một để có được giá trị bỏ qua.
  3. Truyền giá trị đó cho hàm skip() và kích thước trang cho hàm limit().

Ví dụ, trang 1 sử dụng skip(0).limit(2), trang 2 sử dụng skip(2).limit(2) và trang 3 sử dụng skip(4).limit(2). Luôn thêm sort() để thứ tự tài liệu được giữ ổn định trên các trang. Lưu ý rằng các giá trị skip rất lớn có thể làm chậm các tập hợp lớn, bởi vì MongoDB Nó vẫn quét và loại bỏ các tài liệu bị bỏ qua; việc phân trang theo phạm vi sẽ nhanh hơn ở quy mô lớn.

Sắp xếp theo nhiều trường trong MongoDB

MongoDB Bạn có thể sắp xếp theo nhiều trường cùng một lúc. Bạn liệt kê các trường trong đối tượng sắp xếp theo thứ tự ưu tiên, và MongoDB Sắp xếp theo trường đầu tiên, sau đó sử dụng trường tiếp theo để phân định thứ tự khi có sự trùng lặp, và cứ thế tiếp tục.

Ví dụ sau sắp xếp nhân viên theo tên theo thứ tự tăng dần, và đối với những nhân viên có cùng tên, sắp xếp theo EmployeeID theo thứ tự giảm dần:

db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)

Thứ tự các khóa trong đối tượng sắp xếp rất quan trọng: EmployeeName được áp dụng trước vì nó xuất hiện đầu tiên. Việc sắp xếp đa khóa này hữu ích cho các báo cáo mà bạn nhóm theo một trường và sau đó xếp hạng trong mỗi nhóm. Để đạt hiệu suất tốt nhất trên các tập dữ liệu lớn, hãy tạo một chỉ mục phức hợp khớp với các trường và hướng được sử dụng trong quá trình sắp xếp.

Câu Hỏi Thường Gặp

Nếu không có sort(), MongoDB Trả về các tài liệu theo thứ tự tự nhiên, thường phản ánh thứ tự của chúng trên đĩa và không được đảm bảo. Để có thứ tự có thể dự đoán được, hãy luôn thêm lệnh sort() rõ ràng vào một trường như _id.

Theo logic MongoDB Hàm `sort()` luôn được áp dụng trước hàm `limit()`, bất kể thứ tự bạn nối chúng lại với nhau. Điều này có nghĩa là `limit()` trả về các tài liệu hàng đầu của kết quả đã được sắp xếp, chứ không phải một tập hợp con ngẫu nhiên rồi sau đó được sắp xếp lại.

Việc sắp xếp các tập kết quả lớn mà không có chỉ mục sẽ buộc phải thực hiện sắp xếp trong bộ nhớ, và quá trình này sẽ thất bại khi vượt quá giới hạn bộ nhớ. Việc tạo chỉ mục trên trường sắp xếp cho phép... MongoDB Trả về kết quả đã sắp xếp một cách hiệu quả.

Trí tuệ nhân tạo (AI) có thể biến một yêu cầu đơn giản như "năm nhân viên mới nhất" thành một truy vấn find().sort().limit() với hướng và số lượng chính xác. Nó cũng giải thích từng bổ ngữ để người mới bắt đầu có thể nắm bắt được cấu trúc.

Đúng vậy. Trí tuệ nhân tạo (AI) có thể kiểm tra kế hoạch truy vấn, phát hiện các thao tác sắp xếp trong bộ nhớ và đề xuất chỉ mục cần thiết để hỗ trợ việc sắp xếp đó. Điều này giúp các nhà phát triển tăng tốc độ sắp xếp và hạn chế số lượng truy vấn trên các tập dữ liệu lớn.

Tóm tắt bài viết này với: