返すフィールドを指定する
Overview
このガイドでは、 MongoDB PHPライブラリを使用して、プロジェクションを使用して読み取り操作から返されるフィールドを指定する方法を学習できます。 プロジェクションは、 MongoDBがクエリから返すフィールドを指定するドキュメントです。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants
データベース内の restaurants
コレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Client
をインスタンス化し、 $collection
変数に次の値を割り当てます。
$collection = $client->sample_restaurants->restaurants;
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
プロジェクションのタイプ
プロジェクションを使用して、返されるドキュメントに含めるフィールドを指定したり、除外するフィールドを指定したりできます。 _id
フィールドを除外しない限り、1 つのプロジェクションに包含ステートメントと除外ステートメントを組み合わせることはできません。
含めるフィールドの指定
MongoDB\Collection::findOne()
MongoDB\Collection::find()
結果に含めるフィールドを指定するには、projection
オプションを設定する メソッドまたは メソッドにオプション配列を渡します。このオプションを設定するには、次の構文を使用します。
$options = [ 'projection' => [ '<field name>' => 1, ], ];
次の例では、オプション配列を作成し、一致するドキュメントのname
、 cuisine
、およびborough
フィールドのみを返すようにprojection
オプションを設定します。 次に、 find()
メソッドを呼び出して、 name
フィールドの値が'Emerald Pub'
で、オプション配列をfind()
にパラメータとして渡しているすべてのレストランを検索します。
$options = [ 'projection' => [ 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
プロジェクションを使用して返されるドキュメントに含めるフィールドを指定すると、 _id
フィールドもデフォルトで含まれます。 他のすべてのフィールドは暗黙的に除外されます。 返されるドキュメントから_id
フィールドを削除するには、明示的に除外する必要があります。
フィールドを除外する_id
含めるフィールドを指定する場合は、返されるドキュメントから_id
フィールドを除外することもできます。
次の例では、前の例と同じクエリを実行しますが、プロジェクションから_id
フィールドを除外します。
$options = [ 'projection' => [ '_id' => 0, 'name' => 1, 'cuisine' => 1, 'borough' => 1, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"borough":"Manhattan","cuisine":"American","name":"Emerald Pub"} {"borough":"Queens","cuisine":"American","name":"Emerald Pub"}
除外するフィールドの指定
MongoDB\Collection::findOne()
MongoDB\Collection::find()
結果から除外するフィールドを指定するには、projection
オプションを設定する メソッドまたは メソッドにオプション配列を渡します。このオプションを設定するには、次の構文を使用します。
$options = [ 'projection' => [ '<field name>' => 0, ], ];
次の例では、オプション配列を作成し、projection
grades
address
オプションを設定して一致するドキュメントの フィールドと フィールドを除外します。次に、 find()
メソッドを呼び出して、 name
フィールドの値が'Emerald Pub'
であるすべてのレストランを検索し、オプション配列をfind()
にパラメータとして渡します。
$options = [ 'projection' => [ 'grades' => 0, 'address' => 0, ], ]; $cursor = $collection->find(['name' => 'Emerald Pub'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},"borough":"Manhattan","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40367329"} {"_id":{"$oid":"..."},"borough":"Queens","cuisine":"American", "name":"Emerald Pub","restaurant_id":"40668598"}
プロジェクションを使用して除外するフィールドを指定すると、指定されていないフィールドは返されるドキュメントに暗黙的に含まれます。
詳細情報
プロジェクションの詳細については、 MongoDB Serverマニュアルの「プロジェクト フィールド 」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。