Können Sie bitte den zusammengesetzten Index angeben, den Sie erstellt haben? Ich habe keinen guten Ruf, daher konnte ich dies nicht als Kommentar stellen. Aber ich habe eine mögliche Antwort auf Ihre Frage. Mongo verwendet eine Eigenschaft namens "Equality-Sort-Range", die sich anders verhält. Betrachten Sie die folgende Situation:Sie haben wenige Dokumente mit den Feldern {Name:Zeichenfolge, Pin:sechsstellige Nummer, SSN:neunstellige Nummer} und Sie haben zwei Indizes als - {Name:1, Pin:1, ssn:1} und einen zweiten Index ist {name:1, ssn :1, pin :1} Betrachten Sie nun die folgenden Abfragen:
db.test.find({name: "XYZ", pin: 123456"}).sort({ssn: 1})
Diese Abfrage verwendet den ersten Index, da wir einen zusammengesetzten Index in Fortsetzung haben. Name, PIN, ssn werden fortgesetzt.db.test.find({name: "XYZ", pin: {$gt :123456"}}).sort({ssn: 1})
Sie werden erwarten, dass der erste Index in dieser Abfrage verwendet wird. Aber überraschenderweise wird der Sekundenindex von dieser Abfrage verwendet, da er eine Bereichsoperation für Pin hat.
Gleichheits-Sortierbereichseigenschaft besagt, dass der Abfrageplaner den Index für das Feld verwendet, das besser dient - "Gleichheits-Sortierbereich". Die zweite Abfrage hat einen Bereich für den Pin, daher wird der zweite Index verwendet, während die erste Abfrage Gleichheit in allen Feldern hat, sodass der erste Index verwendet wird.