インデックスを使用したクエリの最適化
項目一覧
Overview
このページでは、 MongoDB Scalaドライバーを使用してさまざまなタイプのインデックスを管理する方法を示すコピー可能なコード例を紹介します。
このページの例を使用するには、コード例をサンプルアプリケーションまたは独自のアプリケーションにコピーします。コード例にあるすべてのプレースホルダー(<connection string URI>
など)を、 MongoDBデプロイに関連する値に置き換えてください。
サンプル アプリケーション
次のサンプルアプリケーションを使用して、このページのコードをテストできます。サンプルアプリケーション を使用するには、次の手順を実行します。
プロジェクトにScalaドライバーがインストールされていることを確認してください。詳しくは、「 ダウンロードとインストール 」のガイドを参照してください。
次のコードをコピーし、新しい
.scala
ファイルに貼り付けます。このページからコード例をコピーし、 ファイル内の指定された行に貼り付けます。
import org.mongodb.scala._ import org.mongodb.scala.model.SearchIndexModel import java.util.concurrent.TimeUnit import scala.concurrent.Await import scala.concurrent.duration.Duration import org.mongodb.scala.model.Indexes object SearchIndexes { def main(args: Array[String]): Unit = { // Create a new client and connect to the server val mongoClient = MongoClient("<connection string URI>") val database = mongoClient.getDatabase("<database name>") val collection = database.getCollection("<collection name>") // Start example code here // End example code here Thread.sleep(1000) mongoClient.close() } }
単一フィールド インデックス
次の例では、指定されたフィールドに昇順のインデックスを作成しています。
val index = Indexes.ascending("<field name>") val observable = collection.createIndex(index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
単一フィールドインデックスの詳細については、「単一フィールド インデックスガイド」を参照してください。
複合インデックス
次の例では、指定された 2 つのフィールドに複合インデックスを作成しています。
val index = Indexes.compoundIndex( Indexes.descending("<field name 1>"), Indexes.ascending("<field name 2>") ) val observable = collection.createIndex(index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
複合インデックスの詳細については、「複合インデックス」のガイドを参照してください。
Multikey Index
次の例では、指定された配列値フィールドにマルチキー インデックスを作成します。
val index = Indexes.ascending("<field name>") val observable = collection.createIndex(index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
マルチキー インデックスの詳細については、「 マルチキーインデックス」のガイドを参照してください。
地理空間インデックス
次の例では、GeoJSON オブジェクトを含む指定されたフィールドに2 dsphere インデックスを作成します。
val observable = collection.createIndex(Indexes.geo2dsphere("<2d index>")) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
2dsphere インデックスの詳細については、 MongoDB Serverマニュアルの2 dsphere インデックスのガイドを参照してください。
GeoJSON タイプの詳細については、 MongoDB Serverマニュアルの 「GeoJSON オブジェクト」ガイドを参照してください。
インデックスの削除
次の例では、指定された名前のインデックスを 1 つ削除します。
val observable = collection.dropIndex("<index name>") Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
Atlas Search インデックス マネジメント
次のセクションには、Atlas Search インデックスを管理する方法を説明するコード例が含まれています。
検索インデックスの詳細については、「 Atlas Search インデックスガイド 」を参照してください。
検索インデックスを作成
次の例では、指定されたフィールドに Atlas Search インデックスを作成します。
val index = Document("mappings" -> Document("dynamic" -> <boolean value>)) val observable = collection.createSearchIndex("<index name>", index) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
検索インデックスをリストする
次の例では、指定されたコレクション内の Atlas Search インデックスの一覧を出力します。
val observable = collection.listSearchIndexes() observable.subscribe(new Observer[Document] { override def onNext(index: Document): Unit = println(index.toJson()) override def onError(e: Throwable): Unit = println("Error: " + e.getMessage) override def onComplete(): Unit = println("Completed") })
検索インデックスを更新
次の例では、指定された新しいインデックス定義で既存の Atlas Search インデックスをアップデートします。
val updateIndex = Document("mappings" -> Document("dynamic" -> false)) val observable = collection.updateSearchIndex("<index to update>", updateIndex) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
検索インデックスを削除
次の例では、指定された名前の Atlas Search インデックスを削除します。
val observable = collection.dropSearchIndex("<index name>") Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
API ドキュメント
このガイドで使用されているメソッドまたはオブジェクトの詳細については、次のAPIドキュメントを参照してください。