Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

個別のフィールド値の取得

項目一覧

  • Overview
  • サンプル データ
  • MongoDB\Collection::distinct() 方式
  • コレクション全体で個別の値を取得
  • 指定されたドキュメント全体で個別の値を取得
  • 個別の動作の変更
  • API ドキュメント

このガイドでは、 MongoDB PHPライブラリを使用して、コレクション全体で指定されたフィールドの個別の値を検索する方法を学習できます。

コレクション内では、異なるドキュメントによって単一のフィールドの異なる値が含まれる場合があります。 例、 restaurantsコレクション内の 1 つのドキュメントのborough値は'Manhattan'で、別のドキュメントのborough値は'Queens'です。 MongoDB PHPライブラリを使用すると、コレクション内の複数のドキュメントにわたってフィールドに含まれるすべての一意の値を検索できます。

このガイドの例では、 Atlasサンプルデータセットsample_restaurantsデータベースのrestaurantsコレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Clientをインスタンス化し、 $collection変数に次の値を割り当てます。

$collection = $client->sample_restaurants->restaurants;

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。

指定したフィールドの個別の値を検索するには、 MongoDB\Collection::distinct()メソッドを呼び出し、個別の値を検索するフィールドの名前を渡します。

次の例では、 restaurantsコレクション内のboroughフィールドの個別の値を取得します。

$results = $collection->distinct('borough', []);
foreach ($results as $value) {
echo json_encode($value), PHP_EOL;
}
"Bronx"
"Manhattan"
"Missing"
"Queens"
"Staten Island"

この操作では、個別のboroughフィールド値をそれぞれ保存する配列が返されます。 boroughフィールドでは複数のドキュメントが同じ値になっていますが、各値は結果に 1 回だけ表示されます。

distinct()メソッドにクエリフィルターを提供すると、コレクション内のドキュメントのサブセット全体で個別のフィールド値を検索できます。 クエリフィルターは、操作内のドキュメントを一致させるために使用される検索条件を指定する式です。 クエリフィルターの作成の詳細については、 クエリの指定ガイドを参照してください。

次の例では、 cuisineフィールドの値が'Italian'であるすべてのドキュメントのboroughフィールドの個別の値を取得します。

$results = $collection->distinct('borough', ['cuisine' => 'Italian']);
foreach ($results as $value) {
echo json_encode($value), PHP_EOL;
}
"Bronx"
"Manhattan"
"Queens"
"Staten Island"

オプション値を指定する配列を渡すことで、 distinct()メソッドの動作を変更できます。 次の表では、操作をカスタマイズするために設定できるいくつかのオプションについて説明します。

オプション
説明
collation
The collation to use for the operation.
Type: array|object
maxTimeMS
The maximum amount of time in milliseconds that the operation can run.
Type: integer
comment
The comment to attach to the operation.
Type: any valid BSON type
readPreference
The read preference to use for the operation. To learn more, see Read Preference in the Server manual.
Type: MongoDB\Driver\ReadPreference

次の例では、 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;
}
"$1.25 Pizza"
"18 East Gunhill Pizza"
"2 Bros"
"Aenos Pizza"
"Alitalia Pizza Restaurant"
"Amici Pizza And Pasta"
"Angie'S Cafe Pizza"
...

distinct()メソッドの詳細については、 APIドキュメントのMongoDB\Collection::distinct()を参照してください。

戻る

クエリを指定する