AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

このガイドでは、 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配置を作成し、サンプルデータセットをロードする方法については、MongoDBの使用開始ガイドを参照してください。

指定したフィールドの個別の値を検索するには、 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

操作に使用する照合。詳細を学ぶには、このページの「照合」セクションを参照してください。
タイプ: array|object

maxTimeMS

操作が実行できる最大時間 (ミリ秒)。
タイプ: integer

comment

操作に添付するコメント。
タイプ: 有効な BSON タイプ

readPreference

操作に使用する読み込み設定(read preference)。詳細については、サーバーマニュアルの 読み込み設定(read preference) を参照してください。
タイプ: MongoDB\Driver\ReadPreference

hint

操作に使用するインデックス。
タイプ: string|object

次の例では、 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"
...

操作の 照合 を指定するには、collation オプションを設定する $options 配列パラメータを操作メソッドに渡します。照合ルールを構成する配列に collation オプションを割り当てます。

次の表では、照合を構成するために設定できるフィールドについて説明しています。

フィールド
説明

locale

(必須) International Components for Unicode (ICU) ロケールを指定します。サポートされているロケールの一覧については、MongoDB Server マニュアルの「照合ロケールとデフォルトパラメータ」を参照してください。

データ型: string

caseLevel

(任意) 大文字と小文字の比較を含めるかどうかを指定します。

truestrengthに設定すると、比較の動作は

strength1
フィールドの値に応じて変わります。 - が の場合、PHP ライブラリは基本文字と大文字と小文字を比較します。

-strength2 の場合、PHP
ライブラリは基本文字、分音符号、その他のセカンダリの違い、および大文字と小文字を比較します。

-strength がその他の値の場合、このフィールドは無視されます。

false に設定すると、PHP ライブラリは強度レベル 1 または 2 での大文字と小文字の比較を含めません。

データ型: bool
デフォルト: false

caseFirst

(任意) 三次レベルの比較中の大文字と小文字の相違のソート順序を指定します。

データ型: string
デフォルト: "off"

strength

(任意) ICU ドキュメントで定義されている、実行する比較のレベルを指定します。

データ型: int
デフォルト: 3

numericOrdering

(任意) ドライバーが数字の文字列を数値として比較するかどうかを指定します。

true に設定すると、PHP ライブラリは数字の文字列を数値として比較します。例えば、文字列「10」と「2」を比較する場合、ライブラリは文字列の数値を使用し、「10」を「2」より大きいとして処理します。

falseに設定すると、PHP ライブラリは数値型の文字列を文字列として比較します。例えば、文字列 "10" と "2" を比較する場合、ライブラリは 1 文字ずつ比較し、"10" を "2" より小さいとして取り扱います。

詳細については、MongoDB Server マニュアルの「照合制限」を参照してください。

データ型: bool
デフォルト: false

alternate

(任意) ライブラリが空白と句読点を比較目的の基本文字として考慮するかどうかを指定します。

データ型: string
デフォルト: "non-ignorable"

maxVariable

(任意) alternate フィールドが "shifted" に設定されている場合、ライブラリが無視できる文字を指定します。

データ型: string
デフォルト: "punct"

backwards

(任意) 発音区別符号を含む string を、string の後ろから前にソートするかどうかを指定します。

データ型: bool
デフォルト: false

照合と各フィールドに可能な値の詳細については、 MongoDB Serverマニュアルの「 照合 」エントリを参照してください。

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