Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Ruby ドライバー
/

複合インデックス

複合インデックスは、コレクションのドキュメント内の複数のフィールドへの参照を保持し、クエリとソートのパフォーマンスを向上させます。

複合インデックスを作成するときは、次の詳細を指定する必要があります。

  • インデックスを作成するフィールド

  • 各フィールドの並べ替え順序(昇順または降順)

このガイドの例では、 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 })

コレクション内のインデックスを一覧表示することで、インデックスが作成されたことを確認できます。次の出力に示すように、リストに runtimeyear のインデックスが表示されます。

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 ドキュメントを参照してください。

戻る

シングル フィールド

項目一覧