Tôi có một truy vấn trong mongo sao cho tôi muốn ưu tiên cho trường đầu tiên và sau đó là trường thứ hai.Sắp xếp trên nhiều trường mongo DB
Giả sử tôi có để truy vấn như vậy
db.col.find({category: A}).sort({updated: -1, rating: -1}).limit(10).explain()
Vì vậy, tôi đã tạo ra index sau
db.col.ensureIndex({category: 1, rating: -1, updated: -1})
Nó làm việc quét chỉ bị xử phạt như nhiều đối tượng khi cần thiết tức là 10
Nhưng bây giờ tôi cần truy vấn
db.col.find({category: { $ne: A}}).sort({updated: -1, rating: -1}).limit(10)
Vì vậy, tôi đã tạo ra index sau
db.col.ensureIndex({rating: -1, updated: -1})
nhưng điều này dẫn đến quét toàn bộ tài liệu và khi tôi tạo
db.col.ensureIndex({ updated: -1 ,rating: -1})
Nó quét ít số tài liệu
Tôi chỉ muốn hỏi phải rõ ràng về việc sắp xếp trên nhiều trường và thứ tự được giữ gìn khi làm như vậy. Bằng cách đọc tài liệu mongo-DB, rõ ràng rằng trường mà chúng ta cần thực hiện sắp xếp phải là trường cuối cùng. Vì vậy, đó là trường hợp tôi giả định trong truy vấn $ ne của tôi ở trên. Tôi có làm gì sai không?
Làm thế nào để trả lời câu hỏi này? Bạn vẫn không thể đảm bảo bạn sắp xếp theo thứ tự "xếp hạng desc, cập nhật desc" thay vì "cập nhật desc, xếp hạng desc" – jobermark
@jobermark Trong câu hỏi ban đầu, tiêu chí truy vấn là 'danh mục' với thứ tự sắp xếp hợp lý của' {đã cập nhật: -1, xếp hạng: -1} '. Thứ tự (và hướng) của các khóa trong chỉ mục là quan trọng; chỉ mục được đề xuất sẽ không hỗ trợ hiệu quả tìm kiếm trên 'nội dung' được sắp xếp theo' {rating: -1, updated: -1} '. Nếu bạn đang thao tác các giá trị sắp xếp hợp chất trong trình điều khiển, hãy sử dụng băm/từ điển được sắp xếp để đảm bảo thứ tự được giữ nguyên. Để biết thêm thông tin, hãy xem [Sắp xếp trên nhiều trường] (https://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-on-multiple-fields) trong tài liệu MongoDB. – Stennie