Overview
複合インデックスは、コレクションのドキュメント内の複数のフィールドへの参照を保持し、クエリとソートのパフォーマンスを向上させます。
複合インデックスを作成するときは、次の詳細を指定する必要があります。
インデックスを作成するフィールド
各フィールドの並べ替え順序(昇順または降順)
サンプル データ
このガイドの例では、 Atlasサンプルデータセット の sample_mflix
データベース内の movies
コレクションを使用します。Rubyアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続する Mongo::Client
オブジェクトを作成し、次の値を database
変数と collection
変数に割り当てます。
database = client.use('sample_mflix') collection = database[:movies]
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
複合インデックスの作成
複合インデックスを作成するには、create_one
メソッドを使用します。 次の例では、 runtime
フィールドでは降順でインデックスを作成し、year
フィールドでは昇順でインデックスを作成します。
collection.indexes.create_one({ runtime: -1, year: 1 })
インデックス作成の確認
コレクション内のインデックスを一覧表示することで、インデックスが作成されたことを確認できます。次の出力に示すように、リストに runtime
と year
のインデックスが表示されます。
puts collection.indexes.collect(&:to_json)
{"v": 2, "key": {"runtime": -1, "year": 1}, "name": "runtime_-1_year_1"}
サンプル クエリ
以下は、runtime
フィールドと year
フィールドに作成されたインデックスによってカバーされるクエリの例です。
filter = { '$and' => [ { runtime: { '$gt' => 90 } }, { year: { '$gt' => 2005 } } ] } doc = collection.find(filter).first if doc puts doc.to_json else puts "No document found" end
{"_id":...,"runtime": 91,...,"title": "Monster House",...,"year": 2006,...}
詳細情報
インデックスの管理方法を示す実行可能な例を見るには、 「インデックスを使用してクエリを最適化する」を参照してください。
複合インデックスの詳細については、 マニュアルの「 複合インデックスMongoDB Server 」を参照してください。
API ドキュメント
このガイドで説明されているメソッドの詳細については、次の API ドキュメントを参照してください。