作成した複合インデックスを指定してください。私はあまり評判が良くないので、コメントでこれを尋ねることはできませんでした。しかし、私はあなたの質問に答える可能性があります。Mongoは、異なる動作をする「Equality-Sort-Range」と呼ばれるプロパティを使用します。以下の状況を考慮してください-フィールドが{名前:文字列、ピン:6桁の番号、SSN:9桁の番号}のドキュメントがほとんどなく、{名前:1、ピン:1、ssn:1}と2番目のインデックスの2つのインデックスがあります{name:1、ssn:1、pin:1}は、以下のクエリを検討します:
-
db.test.find({name: "XYZ", pin: 123456"}).sort({ssn: 1})
継続に複合インデックスがあるため、このクエリは最初のインデックスを使用します。名前、ピン、社会保障番号は継続中です。 -
db.test.find({name: "XYZ", pin: {$gt :123456"}}).sort({ssn: 1})
このクエリでは、最初のインデックスが使用されることが期待されます。しかし、驚くべきことに、このクエリでは秒インデックスが使用されます。これは、ピンに対して範囲操作があるためです。
Equality-sort-rangeプロパティは、クエリプランナーが「equality-sort-range」をより適切に提供するフィールドのインデックスを使用することを示しています。 2番目のクエリはピンに範囲があるため2番目のインデックスが使用され、最初のクエリはすべてのフィールドで同等であるため、最初のインデックスが使用されます。