インデックスは、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());
その他のインデックス オプションの詳細については、サーバー マニュアルの「インデックス プロパティ」を参照してください。