フィールドを検索していて、3つの異なるフィールド(ビューカウント、評価、時間)で個別にソートしたい。 3つの異なる複合インデックス{searchField:1、viewcount:1}、{searchField:1、rating:1}および{searchField:1、time:1}を実行する必要があると想定して正しいですか?
また、1つのクエリでsearchFieldを使用して検索し、時間クエリで範囲クエリと並べ替えを実行することもできます。この状況でも、最後のインデックスが正しいでしょう。
あなたの仮定はソート順についての1つのコメントで正しいです。クエリの並べ替え順序がインデックスの並べ替え順序と一致していることを確認してください。一致しない場合、インデックスは使用されません。詳細はこちら こちら 。
ユーザー名と日付のフィールドを持つドキュメントを含むコレクションイベントを考えます。アプリケーションは、最初にユーザー名の値を昇順に並べ替え、次に次のように日付の値を降順に(つまり、最近から最後まで)降順に並べ替えた結果を返すクエリを発行できます。
db.events.find().sort( { username: 1, date: -1 } )
または、次のように、最初にユーザー名の値を降順に並べ、次に日付の値を昇順に並べ替えた結果を返すクエリ。
db.events.find().sort( { username: -1, date: 1 } )
次のインデックスは、これらの並べ替え操作の両方をサポートできます。
db.events.createIndex( { "username" : 1, "date" : -1 } )
ただし、上記のインデックスでは、次のように、ユーザー名の値を昇順に並べ替え、日付の値を昇順に並べ替えることはできません。
db.events.find().sort( { username: 1, date: 1 } )