インデックスを使用したクエリの最適化
項目一覧
Overview
このページでは、 MongoDB PHPライブラリを使用してさまざまなタイプのインデックスを管理する方法を示すコピー可能なコード例を紹介します。
Tip
インデックスの操作の詳細については、「 インデックスに関する考慮事項と管理のガイド」を参照してください。 このページに表示されているインデックスの詳細については、各セクションに提供されているリンクを参照してください。
このページの例を使用するには、コード例をサンプルアプリケーションまたは 独自のアプリケーションにコピーします。 MONGODB_URI
配置の接続string には、{4MongoDB 環境変数を必ず設定し、<database>
と<collection>
のプレースホルダーをターゲット名前空間の値に置き換えます。
サンプル アプリケーション
次のサンプルアプリケーションを使用して、このページのコード例をテストできます。 サンプル アプリケーションを使用するには、次の手順を実行します。
プロジェクトにMongoDB PHPライブラリがインストールされていることを確認してください。 MongoDB PHPライブラリのインストールの詳細については、 「ダウンロードとインストール」のガイドを参照してください。
次のコードをコピーし、新しい
.php
ファイルに貼り付けます。このページからコード例をコピーし、 ファイル内の指定された行に貼り付けます。
1 2 3 require __DIR__ . '/../vendor/autoload.php'; 4 5 $uri = getenv('MONGODB_URI') ?: throw new RuntimeException('Set the MONGODB_URI variable to your Atlas URI that connects to the sample dataset'); 6 $client = new MongoDB\Client($uri); 7 8 $collection = $client->selectCollection('<database>', '<collection>'); 9 10 // Start example code here 11 12 // End example code here
一部の例では、 toJSON()
関数を使用して、 BSONドキュメントである変更イベントを 拡張JSONとして表します。 この関数を使用するには、次のコードをアプリケーションファイルに貼り付けます。
function toJSON(object $document): string { return MongoDB\BSON\Document::fromPHP($document)->toRelaxedExtendedJSON(); }
単一フィールド インデックス
次の例では、指定されたフィールドに昇順のインデックスを作成しています。
$indexName = $collection->createIndex(['<field name>' => 1]);
単一フィールドインデックスの詳細については、「単一フィールド インデックスガイド」を参照してください。
複合インデックス
次の例では、指定されたフィールドに対して 2 つの昇順インデックスからなる複合インデックスを作成します。
$indexName = $collection->createIndex( ['<field name 1>' => 1, '<field name 2>' => 1] );
複合インデックスの詳細については、「複合インデックス」のガイドを参照してください。
Multikey Index
次の例では、指定された配列値フィールドに昇順のマルチキーインデックスを作成しています。
$indexName = $collection->createIndex(['<array field name>' => 1]);
マルチキー インデックスの詳細については、「 マルチキーインデックス」のガイドを参照してください。
地理空間インデックス
次の例では、GeoJSONオブジェクト値を持つ指定されたフィールドに2 dsphereインデックスを作成します。
$indexName = $collection->createIndex( [ '<GeoJSON object field>' => '2dsphere'] );
GeoJSONデータ型の詳細については、 MongoDB Serverマニュアルの 「 GeoJSON オブジェクト」 を参照してください。
ユニークインデックス
次の例では、指定されたフィールドに昇順のユニークインデックスを作成しています。
$indexName = $collection->createIndex(['<field name>' => 1], ['unique' => true]);
ワイルドカード インデックス
次の例では、コレクションに昇順のワイルドカードを作成しています。
$indexName = $collection->createIndex(['$**' => 1]);
クラスター化されたインデックス
指定されたデータベースに新しいコレクションを作成するときに、クラスター化インデックスを作成できます。 次の例では、 _id
フィールドに昇順のクラスターインデックスを含む新しいコレクションを作成します。
$options = [ 'clusteredIndex' => [ 'key' => ['_id' => 1], 'unique' => true ] ]; $database->createCollection('<collection name>', $options);
Text Index
次の例では、指定された string フィールドにテキスト インデックスを作成します。
$indexName = $collection->createIndex(['<field name>' => 'text']);
インデックスをリストする
次の例では、指定されたコレクション内のインデックスのリストを出力します。
foreach ($collection->listIndexes() as $indexInfo) { echo $indexInfo; }
インデックスの削除
次の例では、指定された名前のインデックスを 1 つ削除します。
$collection->dropIndex('<index name>');
インデックスの削除の詳細については、「 インデックスの考慮事項と管理ガイド」の「 インデックスの削除 」を参照してください。
Atlas Search インデックス マネジメント
次のセクションには、 Atlas Search インデックスを管理する方法を説明するコード例が含まれています。
注意
Atlas Search インデックス管理は非同期
MongoDB PHPライブラリは Atlas Search インデックスを非同期で管理します。 次のセクションで説明されているライブラリ メソッドは、サーバー応答をすぐに返しますが、検索インデックスへの変更はバックグラウンドで行われ、しばらくが完了しないと完了しない可能性があります。
Atlas Search インデックスの詳細については、「 Atlas Search インデックス 」のガイドを参照してください。
検索インデックスを作成
次の例では、指定されたフィールドに Atlas Search インデックスを作成します。
$indexName = $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => '<Search index name>'] );
検索インデックスをリストする
次の例では、指定されたコレクション内の Atlas Search インデックスの一覧を出力します。
foreach ($collection->listSearchIndexes() as $indexInfo) { echo toJSON($indexInfo), PHP_EOL; }
検索インデックスを更新
次の例では、指定された新しいインデックス定義で既存の Atlas Search インデックスをアップデートします。
$collection->updateSearchIndex( '<Search index name>', ['mappings' => [ 'dynamic' => false, 'fields' => [ '<string field name>' => [ 'type' => 'string', 'analyzer' => 'lucene.standard' ] ] ]] );
検索インデックスを削除
次の例では、指定された名前の Atlas Search インデックスを削除します。
$collection->dropSearchIndex('<Search index name>');