Bạn có thể vui lòng chỉ định chỉ mục phức hợp mà bạn đã tạo. Tôi không có nhiều danh tiếng nên không thể hỏi điều này trong bình luận, nhưng tôi có thể có một người có thể trả lời câu hỏi của bạn.Mongo sử dụng một thuộc tính có tên là "Equality-Sort-Range" hoạt động theo một cách khác. Hãy xem xét tình huống dưới đây-Bạn có một vài tài liệu có các trường {name:string, pin:sáu chữ số, SSN:chín chữ số} và bạn có hai chỉ số là - {name:1, pin:1, ssn:1} và chỉ mục thứ hai là {name:1, ssn:1, pin:1} bây giờ hãy xem xét các truy vấn dưới đây:
-
db.test.find({name: "XYZ", pin: 123456"}).sort({ssn: 1})
Truy vấn này sẽ sử dụng chỉ mục đầu tiên vì chúng ta có chỉ mục kết hợp tiếp tục. Tên, mã pin, ssn vẫn tiếp tục. -
db.test.find({name: "XYZ", pin: {$gt :123456"}}).sort({ssn: 1})
Bạn sẽ mong đợi rằng chỉ mục đầu tiên sẽ được sử dụng trong truy vấn này. Nhưng đáng ngạc nhiên là chỉ mục giây sẽ được sử dụng bởi truy vấn này vì nó có một hoạt động phạm vi trên pin.
Thuộc tính Equality-sort-range cho biết rằng công cụ lập kế hoạch truy vấn sẽ sử dụng chỉ mục trên trường phân phối - tốt hơn "Equality-sort-range". Truy vấn thứ hai có phạm vi trên chân nên chỉ mục thứ hai sẽ được sử dụng trong khi truy vấn đầu tiên có giá trị bằng nhau trên tất cả các trường nên chỉ mục đầu tiên sẽ được sử dụng.