MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /
Tutorials

インデックスの作成

インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。 1 つまたは複数のフィールドにインデックスを作成するには、インデックス仕様ドキュメントを MongoCollection.createIndex()メソッドに渡します。

Scalaドライバーは、さまざまなMongoDBインデックスキー タイプのインデックス仕様ドキュメントを作成するための静的ファクトリー メソッドを含む インデックス ビルダ クラスクラスを提供します。インデックスタイプの詳細については、サーバー マニュアルの「 インデックス 」を参照してください。

注意

MongoDB は、同じ仕様のインデックスがまだ存在しない場合にのみインデックスを作成します。

このガイドのコード例を実行するには、プログラムに次のインポート ステートメントを含める必要があります。

import org.mongodb.scala._
import org.mongodb.Indexes
import org.mongodb.IndexOptions
import org.mongodb.Filters

注意

このガイドでは、クイック スタート プライマリで説明されているObservable暗黙的な を使用します。

まず、MongoDB 配置に接続し、 インスタンスとMongoDatabase MongoCollectionインスタンスを 宣言して定義します。

次のコードは、ポート27017localhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。

昇順インデックスの仕様を作成するには、 Indexes.ascending()静的ヘルパー メソッドを使用します。

次の例では、 nameフィールドに昇順のインデックスを作成しています。

collection.createIndex(Indexes.ascending("name"))
.printResults()

次の例では、 starsフィールドとnameフィールドに昇順の複合インデックスを作成しています。

collection.createIndex(Indexes.ascending("stars", "name"))
.printResults()

複合インデックスを作成する別の方法については、「複合インデックス」セクションを参照してください。

降順インデックスの仕様を作成するには、 Indexes.descending()静的ヘルパー メソッドを使用します。

次の例では、 starsフィールドに降順のインデックスを作成しています。

collection.createIndex(Indexes.descending("stars"))
.printResults()

次の例では、 starsフィールドとnameフィールドに降順の複合インデックスを作成しています。

collection.createIndex(Indexes.descending("stars", "name"))
.printResults()

複合インデックスを作成する別の方法については、「複合インデックス」セクションを参照してください。

複合インデックスの仕様を作成するには、 Indexes.compoundIndex()静的ヘルパー メソッドを使用します。

注意

すべてのキーが昇順である複合インデックスの仕様を作成するには、 ascending()メソッドを使用できます。 すべてのキーが降順である複合インデックスの仕様を作成するには、 descending()メソッドを使用できます。

次の例では、 starsフィールドでは降順で、 nameフィールドでは昇順で複合インデックスが作成されます。

collection.createIndex(
Indexes.compoundIndex(Indexes.descending("stars"),
Indexes.ascending("name")))
.printResults()

MongoDB は、string コンテンツのテキスト クエリをサポートするために インデックス を提供します。テキストインデックスには、値が string または複数の string 配列である任意のフィールドを含めることができます。テキストインデックスの仕様を作成するには、Indexes.text()ヘルパーメソッドを使用します。

次の例では、 nameフィールドに テキスト インデックスを作成しています。

collection.createIndex(Indexes.text("name"))
.printResults()

テキスト インデックスの詳細については、サーバー マニュアルの「テキストインデックス 」を参照してください。

ハッシュ インデックス インデックスの仕様を作成するには、 Indexes.hashed()静的ヘルパー メソッドを使用します。

次の例では、 _idフィールドに ハッシュされたインデックスを作成しています。

collection.createIndex(Indexes.hashed("_id"))
.printResults()

ハッシュインデックスの詳細については、サーバー マニュアルの「 ハッシュされたインデックス 」を参照してください。

地理空間クエリをサポートするために、MongoDB はさまざまな地理空間インデックスをサポートしています。 地理空間インデックスの詳細については、サーバー マニュアルの「地理空間インデックス 」を参照してください。

2dsphereインデックスの仕様を作成するには、 Indexes.geo2dsphere()静的ヘルパー メソッドを使用します。

次の例では、 contact.locationフィールドに2dsphereインデックスを作成します。

collection.createIndex(Indexes.geo2dsphere("contact.location"))
.printResults()

インデックス仕様ドキュメントに加えて、 createIndex()メソッドは、一意のインデックスまたは部分インデックスを作成するようにドライバーに指示するインデックス オプション ドキュメントを受け入れることができます。

ドライバーはさまざまなインデックス オプションを指定するためのIndexOptionsクラスを提供します。

次のインポート ステートメントをコードに追加して、 IndexOptionsインスタンスを作成します。

import org.mongodb.scala.model.IndexOptions

次のコードでは、unique(true) オプションを指定して、name フィールドとstars フィールドに一意のインデックスを作成します。

val indexOptions = IndexOptions().unique(true)
collection.createIndex(Indexes.ascending("name", "stars"), indexOptions)
.printResults()

一意なインデックスの詳細については、サーバー マニュアルの「 一意なインデックス 」を参照してください。

部分インデックスを作成するには、 partialFilterExpressionインデックス オプションを含めます。

次の例では、 statusフィールドの値が"A"であるドキュメントに部分インデックスを作成します。

val partialFilterIndexOptions = IndexOptions()
.partialFilterExpression(Filters.exists("contact.email"))
collection.createIndex(
Indexes.descending("name", "stars"), partialFilterIndexOptions)
.printResults()

部分インデックスの詳細については、サーバー マニュアルの「部分インデックス 」を参照してください。

インデックスのリストを取得するには、 listIndexes()メソッドを使用します。 次のコードを使用することで、 コレクションのインデックスが一覧表示されます。

collection.listIndexes().printResults()

その他のインデックス オプションの詳細については、サーバー マニュアルの「インデックス プロパティ」を参照してください。

戻る

データベースとコレクション