Trong MongoDB, bạn có thể sắp xếp kết quả của một truy vấn bằng cách sử dụng limit()
phương pháp.
Trong MongoDB, khi bạn truy vấn một tập hợp bằng db.collection.find()
, bạn có thể thêm sort()
để xác định cách sắp xếp kết quả. sort()
phương thức chỉ định thứ tự sắp xếp cho con trỏ.
Khi sử dụng sort()
, bạn phải cung cấp thứ tự sắp xếp dưới dạng tham số. Đây phải là tài liệu JSON xác định thứ tự sắp xếp. Nó thường sẽ chứa một hoặc nhiều trường, mỗi trường theo sau là 1
hoặc -1
, tùy thuộc vào việc sắp xếp theo thứ tự tăng dần hay giảm dần.
Ví dụ
Trước tiên, hãy thực hiện một truy vấn không có sử dụng sort()
(để chúng ta có thể thấy thứ tự sắp xếp tự nhiên):
Không có sort()
db.musicians.find( )
Kết quả:
{ "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Với sort()
theo thứ tự tăng dần
Giá trị 1
bên cạnh tên trường chỉ định rằng các tài liệu phải được sắp xếp theo trường được chỉ định theo thứ tự tăng dần.
Ở đây chúng tôi sắp xếp các kết quả theo tên theo thứ tự tăng dần:
db.musicians.find( ).sort( { name: 1 } )
Kết quả:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 }
Với sort()
theo Thứ tự giảm dần
Giá trị -1
bên cạnh tên trường chỉ định thứ tự giảm dần.
Ở đây chúng tôi sắp xếp các kết quả theo tên theo thứ tự giảm dần:
db.musicians.find( ).sort( { name: -1 } )
Kết quả:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }
Nhiều trường
Bạn có thể sắp xếp theo nhiều trường. Chỉ cần tách từng trường bằng dấu phẩy. Khi bạn làm điều này, các tài liệu sẽ được sắp xếp theo trường đầu tiên được chỉ định, sau đó là trường tiếp theo, v.v.
Ở đây, chúng tôi sắp xếp theo tools , theo sau là trường sinh ra đồng ruộng. Nếu hai hoặc nhiều nhạc sĩ chơi cùng một nhạc cụ, được sinh ra trường xác định cách chúng được sắp xếp tương đối với nhau.
db.musicians.find( ).sort( { instrument: 1, born: 1 } )
Kết quả:
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Và chỉ để xem trường thứ hai có thể ảnh hưởng như thế nào đến đơn đặt hàng, hãy chuyển nó sang giá trị âm (giảm dần):
db.musicians.find( ).sort( { instrument: 1, born: -1 } )
Kết quả:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 } { "_id" : 7, "name" : "Jeff Burrows", "instrument" : "Drums", "born" : 1968 } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
Sắp xếp theo giới hạn
Bạn có thể sử dụng sort()
với limit()
để sắp xếp các kết quả của tập kết quả giới hạn.
Ở đây, chúng tôi giới hạn kết quả trong 3 tài liệu:
db.musicians.find( ).limit(3).sort( { name: 1, born: -1 } )
Kết quả:
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 } { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" } { "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
Nếu chúng ta chuyển đổi name theo thứ tự giảm dần:
db.musicians.find( ).limit(3).sort( { name: -1, born: -1 } )
Kết quả:
{ "_id" : 8, "name" : "Stuart Chatwood", "instrument" : "Bass", "born" : 1969 } { "_id" : 4, "name" : "Steve Morse", "instrument" : "Guitar", "born" : 1954 } { "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
Lưu ý rằng trong trường hợp này, sinh ra không có hiệu lực, vì không bao giờ có nhiều hơn một kết quả cho một tên nhất định.
So sánh các loại khác nhau
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:
- MinKey (loại nội bộ)
- Không có
- Số (ints, longs, double)
- Biểu tượng, Chuỗi
- Đối tượng
- Mảng
- BinData
- ObjectId
- Boolean
- Ngày tháng
- Dấu thời gian
- Cụm từ Thông dụng
- MaxKey (loại nội bộ)
Lưu ý rằng các trường không tồn tại được coi giống như một giá trị null (hoặc đối tượng BSON trống).