Hướng dẫn how do i sort an array in mongodb aggregation? - làm cách nào để sắp xếp một mảng trong tập hợp mongodb?
Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual Show $sort Sorts tất cả các tài liệu đầu vào và trả lại chúng cho đường ống theo thứ tự được sắp xếp.Sorts all input documents and returns them to the pipeline in sorted order. Giai đoạn
0 can have one of the following values:
Nếu sắp xếp trên nhiều trường, thứ tự sắp xếp được đánh giá từ trái sang phải. Ví dụ, trong mẫu trên, các tài liệu được sắp xếp đầu tiên bởi 5. Sau đó, các tài liệu có cùng giá trị 5 được sắp xếp thêm bởi 7.Bạn có thể sắp xếp tối đa 32 phím. MongoDB không lưu trữ tài liệu trong một bộ sưu tập theo một thứ tự cụ thể. Khi sắp xếp trên một trường chứa các giá trị trùng lặp, các tài liệu chứa các giá trị đó có thể được trả về theo bất kỳ thứ tự nào. Nếu thứ tự sắp xếp nhất quán được mong muốn, bao gồm ít nhất một trường theo loại của bạn có chứa các giá trị duy nhất. Cách dễ nhất để đảm bảo điều này là bao gồm trường 8 trong truy vấn sắp xếp của bạn.Xem xét bộ sưu tập 9 sau:
Lệnh sau sử dụng giai đoạn 1:$sort stage to sort on the 1 field:
Trong ví dụ này, thứ tự sắp xếp có thể không nhất quán, vì trường 1 chứa các giá trị trùng lặp cho cả 3 và 4. Các tài liệu được trả về theo thứ tự bảng chữ cái bởi 1, nhưng thứ tự của các tài liệu đó có giá trị trùng lặp cho 1 có thể không giống nhau trên nhiều lần thực hiện cùng loại. Ví dụ: đây là kết quả từ hai lần thực thi khác nhau của lệnh trên:
Mặc dù các giá trị cho 1 vẫn được sắp xếp theo thứ tự bảng chữ cái, thứ tự của các tài liệu chứa các giá trị trùng lặp cho 1 (nghĩa là 3 và 4) không giống nhau.Để đạt được một loại nhất quán, hãy thêm một trường chứa các giá trị duy nhất độc đáo vào loại. Lệnh sau sử dụng giai đoạn 1 và trường 8:$sort stage to sort on both the 1 field and the 8 field:
Do trường 8 luôn được đảm bảo chứa các giá trị duy nhất, nên thứ tự sắp xếp được trả về sẽ luôn giống nhau trên nhiều lần thực hiện cùng loại.Đối với trường hoặc trường sắp xếp, đặt thứ tự sắp xếp thành 1 hoặc 2 để chỉ định sắp xếp tăng dần hoặc giảm dần, như trong ví dụ sau:
Hoạt động này sắp xếp các tài liệu trong bộ sưu tập 7, theo thứ tự giảm dần theo trường 8 và sau đó theo thứ tự tăng dần theo giá trị trong trường 9.Khi so sánh các giá trị của các loại BSON khác nhau, MongoDB sử dụng thứ tự so sánh sau, từ thấp nhất đến cao nhất:
Để biết chi tiết về thứ tự so sánh/sắp xếp cho các loại cụ thể, hãy xem thứ tự so sánh/sắp xếp. Đối với một đường ống bao gồm tìm kiếm 0, bạn có thể sắp xếp bằng cách giảm điểm số liên quan bằng cách sử dụng biểu thức 1. Trong tài liệu 2, đặt biểu thức 3 thành một tên trường tùy ý. Tên trường bị bỏ qua bởi hệ thống truy vấn. Ví dụ:
Hoạt động này sử dụng toán tử 0 để khớp với các tài liệu và sau đó sắp xếp đầu tiên theo siêu dữ liệu 5 theo thứ tự giảm dần, và sau đó theo trường 9 theo thứ tự giảm dần. Tên trường 7 trong tài liệu sắp xếp bị bỏ qua bởi hệ thống truy vấn. Trong đường ống này, siêu dữ liệu 5 không được bao gồm trong phép chiếu và không được trả lại như một phần của các tài liệu phù hợp. Xem 9 để biết thêm thông tin.Khi 1 và không có giai đoạn can thiệp nào sửa đổi số lượng tài liệu, trình tối ưu hóa có thể hợp nhất 1 vào $sort . Điều này cho phép hoạt động $sort chỉ duy trì kết quả 5 hàng đầu khi nó tiến triển, trong đó 5 là giới hạn được chỉ định và đảm bảo rằng MongoDB chỉ cần lưu trữ các mục 5 trong bộ nhớ. Tối ưu hóa này vẫn được áp dụng khi 8 là 9 và các mục 5 vượt quá giới hạn bộ nhớ tổng hợp.$sort precedes a
1 and there are no intervening stages that modify the number of documents, the optimizer can coalesce the 1 into the
$sort . This allows the $sort operation to only maintain the top 5 results as it progresses, where 5 is the specified limit, and ensures that MongoDB only needs to store 5 items in
memory. This optimization still applies when 8 is 9 and the 5 items exceed the aggregation memory limit.Tối ưu hóa có thể thay đổi giữa các bản phát hành.
Bắt đầu từ MongoDB 6.0, các giai đoạn đường ống yêu cầu hơn 100 megabyte bộ nhớ để thực hiện ghi các tệp tạm thời vào đĩa theo mặc định. Trong các Verison trước đó của MongoDB, bạn phải chuyển 2 cho cá nhân 3 và 4 để cho phép hành vi này.Các lệnh cá nhân 3 và 4 có thể ghi đè tham số 7 bằng một trong hai:
MẹoXem thêm:Nhà điều hành Khi bạn sử dụng MẹoTập hợp sắp xếp là gì?Hoạt động này sắp xếp các tài liệu trong bộ sưu tập người dùng, theo thứ tự giảm dần theo trường độ tuổi và sau đó theo thứ tự tăng dần theo giá trị trong trường Bài viết.sorts the documents in the users collection, in descending order according by the age field and then in ascending order according to the value in the posts field.
Sự khác biệt giữa việc sử dụng tổng hợp () và find () trong MongoDB là gì?Với tổng hợp + $ khớp, bạn có được một BSON nguyên khối lớn chứa tất cả các tài liệu phù hợp. Với tìm, bạn có một con trỏ cho tất cả các tài liệu phù hợp. Sau đó bạn có thể nhận từng tài liệu một. With find, you get a cursor to all matching documents. Then you can get each document one by one.
Tra cứu trong tập hợp cho MongoDB là gì?$ Tra cứu thực hiện một trận đấu bình đẳng trên Localfield với Foreign Field từ các tài liệu của bộ sưu tập.Nếu một tài liệu đầu vào không chứa LocalField, thì $ Tra cứu sẽ coi trường là có giá trị null cho mục đích phù hợp.performs an equality match on the localField to the foreignField from the documents of the from collection. If an input document does not contain the localField , the $lookup treats the field as having a value of null for matching purposes.
MongoDB sử dụng thuật toán nào?Nếu MongoDB không thể có được thứ tự sắp xếp thông qua quét chỉ mục, thì MongoDB sử dụng thuật toán sắp xếp Top-K.Thuật toán này đệm kết quả K đầu tiên (hoặc cuối cùng, tùy thuộc vào thứ tự sắp xếp) được thấy cho đến nay bởi chỉ số cơ bản hoặc truy cập thu thập.top-k sort algorithm. This algorithm buffers the first k results (or last, depending on the sort order) seen so far by the underlying index or collection access. |