インデックスの作成
項目一覧
インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。 1 つまたは複数のフィールドにインデックスを作成するには、インデックス仕様ドキュメントを MongoCollection.createIndex()
メソッドに渡します。
Java Reactive Streams ドライバーは、さまざまな MongoDB インデックス キー タイプのインデックス仕様ドキュメントを作成するための静的ファクトリー メソッドを含むIndexes
クラスを提供します。 インデックス タイプの詳細については、サーバー マニュアルの「 インデックス」を参照してください。
注意
MongoDB は、同じ仕様のインデックスがまだ存在しない場合にのみインデックスを作成します。
前提条件
このガイドのコード例を実行するには、プログラムに次のインポート ステートメントを含める必要があります。
import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoDatabase; import com.mongodb.reactivestreams.client.MongoCollection; import org.bson.Document; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Filters;
重要
このガイドでは、 クイック スタート プライマリで説明されているSubscriber
の実装を使用します。
MongoDB 配置への接続
まず、MongoDB 配置に接続し、 インスタンスとMongoDatabase
MongoCollection
インスタンスを 宣言して定義します。
次のコードは、ポート27017
のlocalhost
で実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 test
データベースを参照するためのdatabase
変数と、 restaurants
コレクションを参照するためのcollection
変数を定義します。
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。
昇順インデックス
昇順インデックスの仕様を作成するには、 Indexes.ascending()
静的ヘルパー メソッドを使用します。
単一昇順インデックス
次の例では、 name
フィールドに昇順のインデックスを作成しています。
collection.createIndex(Indexes.ascending("name")) .subscribe(new PrintToStringSubscriber<String>());
昇順複合インデックス
次の例では、 stars
フィールドとname
フィールドに昇順の複合インデックスを作成しています。
collection.createIndex(Indexes.ascending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
複合インデックスを作成する別の方法については、「複合インデックス」セクションを参照してください。
降順インデックス
降順インデックスの仕様を作成するには、 Indexes.descending()
静的ヘルパー メソッドを使用します。
単一降順キー インデックス
次の例では、 stars
フィールドに降順のインデックスを作成しています。
collection.createIndex(Indexes.descending("stars")) .subscribe(new PrintToStringSubscriber<String>());
複合降順キー インデックス
次の例では、 stars
フィールドとname
フィールドに降順の複合インデックスを作成しています。
collection.createIndex(Indexes.descending("stars", "name")) .subscribe(new PrintToStringSubscriber<String>());
複合インデックスを作成する別の方法については、「複合インデックス」セクションを参照してください。
複合インデックス
複合インデックスの仕様を作成するには、 Indexes.compoundIndex()
静的ヘルパー メソッドを使用します。
注意
すべてのキーが昇順である複合インデックスの仕様を作成するには、 ascending()
メソッドを使用できます。 すべてのキーが降順である複合インデックスの仕様を作成するには、 descending()
メソッドを使用できます。
次の例では、 stars
フィールドでは降順で、 name
フィールドでは昇順で複合インデックスが作成されます。
collection.createIndex( Indexes.compoundIndex(Indexes.descending("stars"), Indexes.ascending("name")) ).subscribe(new PrintToStringSubscriber<String>());
Text Indexes
MongoDB は、string コンテンツのテキスト検索をサポートするための テキストインデックス を提供します。 テキストインデックスには、値が string または複数の string 配列である任意のフィールドを含めることができます。 テキスト インデックスの仕様を作成するには、 Indexes.text()
静的ヘルパー メソッドを使用します。
次の例では、 name
フィールドに テキスト インデックスを作成しています。
collection.createIndex(Indexes.text("name")) .subscribe(new PrintToStringSubscriber<String>());
ハッシュされたインデックス
ハッシュ インデックス インデックスの仕様を作成するには、 Indexes.hashed()
静的ヘルパー メソッドを使用します。
次の例では、 _id
フィールドに ハッシュされたインデックスを作成しています。
collection.createIndex(Indexes.hashed("_id")) .subscribe(new PrintToStringSubscriber<String>());
地理空間インデックス
地理空間クエリをサポートするために、MongoDB はさまざまな地理空間インデックスをサポートしています。
2dsphere
2dsphere
インデックスの仕様を作成するには、 Indexes.geo2dsphere()
静的ヘルパー メソッドを使用します。
次の例では、 contact.location
フィールドに2dsphere
インデックスを作成します。
collection.createIndex(Indexes.geo2dsphere("contact.location")) .subscribe(new PrintToStringSubscriber<String>());
インデックス オプション
インデックス仕様ドキュメントに加えて、 createIndex()
メソッドは インデックス オプション ドキュメントを受け入れることができます。これは、一意のインデックスまたは部分インデックスを作成するようにドライバーに指示します。
ドライバーはさまざまなインデックス オプションを指定するためのIndexOptions
クラスを提供します。
次のインポート ステートメントをコードに追加して、 IndexOptions
インスタンスを作成します。
import com.mongodb.client.model.IndexOptions;
ユニークインデックス
次のコードでは、unique(true)
オプションを指定して、name
フィールドとstars
フィールドに一意のインデックスを作成します。
IndexOptions indexOptions = new IndexOptions().unique(true); collection.createIndex(Indexes.ascending("name", "stars"), indexOptions) .subscribe(new PrintToStringSubscriber<String>());
部分インデックス
部分インデックスを作成するには、 partialFilterExpression
インデックス オプションを含めます。
次の例では、 status
フィールドの値が"A"
であるドキュメントに部分インデックスを作成します。
IndexOptions partialFilterIndexOptions = new IndexOptions() .partialFilterExpression(Filters.exists("contact.email")); collection.createIndex( Indexes.descending("name", "stars"), partialFilterIndexOptions) .subscribe(new PrintToStringSubscriber<String>());
コレクションのインデックスのリストの取得
インデックスのリストを取得するには、 listIndexes()
メソッドを使用します。 次のコードを使用することで、 コレクションのインデックスが一覧表示されます。
collection.listIndexes().subscribe(new PrintDocumentSubscriber());
その他のインデックス オプションの詳細については、サーバー マニュアルの「インデックス プロパティ」を参照してください。