Overview
このガイドでは、 MongoDB PHPライブラリを使用して、コレクション全体で指定されたフィールドの個別の値を検索する方法を学習できます。
コレクション内では、異なるドキュメントによって単一のフィールドの異なる値が含まれる場合があります。 例、 restaurantsコレクション内の 1 つのドキュメントのborough値は'Manhattan'で、別のドキュメントのborough値は'Queens'です。 MongoDB PHPライブラリを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。
サンプル データ
The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your PHP application, instantiate a MongoDB\Client that connects to an Atlas cluster and assign the following value to your $collection variable:
$collection = $client->sample_restaurants->restaurants;
無料の MongoDB 配置を作成し、サンプルデータセットを読み込む方法については、MongoDB の スタートガイドを参照してください。
MongoDB\Collection::distinct() 方式
指定したフィールドの個別の値を検索するには、 MongoDB\Collection::distinct()メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。
コレクション全体で個別の値を取得
次の例では、 restaurantsコレクション内のboroughフィールドの個別の値を取得します。
$results = $collection->distinct('borough', []); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
この操作では、個別のboroughフィールド値をそれぞれ保存する配列が返されます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。
指定されたドキュメント全体で個別の値を取得
distinct()メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット全体で個別のフィールド値を検索できます。 クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。 クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
次の例では、 cuisineフィールドの値が'Italian'であるすべてのドキュメントのboroughフィールドの個別の値を取得します。
$results = $collection->distinct('borough', ['cuisine' => 'Italian']); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
個別の動作の変更
オプション値を指定する配列を渡すことで、 distinct()メソッドの動作を変更できます。 次の表では、操作をカスタマイズするために設定できるいくつかのオプションについて説明します。
オプション | 説明 |
|---|---|
| |
| 操作が実行できる最大時間 (ミリ秒)。 |
| 操作に添付するコメント。 |
| 操作に使用する読み込み設定 (read preference)です。詳細については、サーバー マニュアルの「 読み込み設定 |
| 操作に使用するインデックス。 |
次の例では、 boroughフィールド値が'Bronx'で、かつcuisineフィールド値が'Pizza'であるすべてのドキュメントのnameフィールドの個別の値を取得します。 また、操作にコメントを追加するには、オプション配列のcommentフィールドを指定します。
$query = ['borough' => 'Bronx', 'cuisine' => 'Pizza']; $options = ['comment' => 'Bronx pizza restaurants']; $results = $collection->distinct('name', $query, $options); foreach ($results as $value) { echo json_encode($value), PHP_EOL; }
照合
操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。
次の表では、照合を構成するために設定できるフィールドについて説明しています。
フィールド | 説明 |
|---|---|
| (Required) Specifies the International Components for Unicode (ICU) locale. For a list of supported locales, see Collation Locales and Default Parameters in the MongoDB Server manual. |
| (任意) 大文字と小文字の比較を含めるかどうかを指定します。 |
| (任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。 |
| (Optional) Specifies the level of comparison to perform, as defined in the ICU documentation. |
| (任意)ドライバーが数字の string を数値として比較するかどうかを指定します。 |
| (任意) ライブラリが空白と句読点を比較目的の基本文字として考慮するかどうかを指定します。 |
| (任意) |
| (任意) 発音区別符号を含む string を、string の後ろから前にソートするかどうかを指定します。 |
照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。
API ドキュメント
distinct()メソッドの詳細については、 APIドキュメントのMongoDB\Collection::distinct()を参照してください。