返すドキュメントを指定する
Overview
このガイドでは、次のオプションを MongoDB\Collection::find()
またはMongoDB\Collection::findOne()
メソッドに渡すことで、読み取り操作から返されるドキュメントとタイプを指定する方法を学習できます。
limit : クエリから返されるドキュメントの最大数を指定します
sort : 返されるドキュメントのソート順序を指定します
skip : クエリ結果を返す前にスキップするドキュメントの数を指定します
typeMap : 返されたドキュメントを指定されたデータ型に変換します
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurants
データベースのrestaurants
コレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Client
をインスタンス化し、次の値を$collection
変数に割り当てます。
$collection = $client->sample_restaurants->restaurants;
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。
Limit
読み取り操作から返されるドキュメントの最大数を指定するには、 limit
オプションを設定する配列を作成し、その配列をMongoDB\Collection::find()
メソッドのパラメーターとして渡します。
次の例では、 cuisine
フィールドの値が'Italian'
であるすべてのレストランを検索し、結果を5
ドキュメントに制限します。
$cursor = $collection->find( ['cuisine' => 'Italian'], ['limit' => 5] ); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},...,"name":"Isle Of Capri Resturant","restaurant_id":"40364373"} {"_id":{"$oid":"..."},...,"name":"Marchis Restaurant","restaurant_id":"40364668"} {"_id":{"$oid":"..."},...,"name":"Crystal Room","restaurant_id":"40365013"} {"_id":{"$oid":"..."},...,"name":"Forlinis Restaurant","restaurant_id":"40365098"} {"_id":{"$oid":"..."},...,"name":"Angelo Of Mulberry St.","restaurant_id":"40365293"}
Tip
上記の例では、データベース内の自然な順序に従ってクエリに一致する最初の 5 つのドキュメントが返されます。 次のセクションでは、指定された順序でドキュメントを返す方法について説明します。
Sort
指定した順序でドキュメントを返すには、 sort
オプションを設定する配列を作成します。 このオプションを設定する場合、結果を とソート方向でソートするためのフィールドを含めます。 1
の値は最低から最高の順にソートされ、 -1
の値は最高から最低の順にソートされます。 次に、その配列を メソッドまたはMongoDB\Collection::find()
MongoDB\Collection::findOne()
メソッドのパラメーターとして渡します。
次の例では、 cuisine
値が'Italian'
であるすべてのドキュメントを、 name
フィールド値の昇順でソートして返します。
$cursor = $collection->find( ['cuisine' => 'Italian'], ['sort' => ['name' => 1]] ); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},...,"name":"44 Sw Ristorante & Bar","restaurant_id":"40698807"} {"_id":{"$oid":"..."},...,"name":"900 Park","restaurant_id":"41707964"} {"_id":{"$oid":"..."},...,"name":"A Voce","restaurant_id":"41434084"} ... {"_id":{"$oid":"..."},...,"name":"Zucchero E Pomodori","restaurant_id":"41189590" }
スキップ
クエリ結果を返す前に指定した数のドキュメントをスキップするには、skip
オプションを設定する配列を作成し、その配列を メソッドまたはMongoDB\Collection::find()
MongoDB\Collection::findOne()
メソッドのパラメーターとして渡します。
次の例では、 borough
フィールドの値が'Manhattan'
であるすべてのドキュメントを返し、最初の10
ドキュメントをスキップします。
$cursor = $collection->find( ['borough' => 'Manhattan'], ['skip' => 10] ); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},...,"name":"Cafe Metro","restaurant_id":"40363298"} {"_id":{"$oid":"..."},...,"name":"Lexler Deli","restaurant_id":"40363426"} {"_id":{"$oid":"..."},...,"name":"Domino'S Pizza","restaurant_id":"40363644"} ...
制限、ソート、スキップの組み合わせ
単一のオプション配列でlimit
、 sort
、 skip
オプションを設定し、その配列を 読み取り操作のパラメーターとして渡すことができます。 これにより、返されるソートされたドキュメントの最大数を設定して、返される前に指定された数のドキュメントをスキップできます。
次の例では、 cuisine
の値が'Italian'
である5
ドキュメントが返されます。 結果はname
フィールド値の昇順でソートされ、最初の10
ドキュメントはスキップされます。
$options = [ 'sort' => ['name' => 1], 'limit' => 5, 'skip' => 10, ]; $cursor = $collection->find(['cuisine' => 'Italian'], $options); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":{"$oid":"..."},...,"name":"Acqua","restaurant_id":"40871070"} {"_id":{"$oid":"..."},...,"name":"Acqua Restaurant","restaurant_id":"41591488"} {"_id":{"$oid":"..."},...,"name":"Acqua Santa","restaurant_id":"40735858"} {"_id":{"$oid":"..."},...,"name":"Acquista Trattoria","restaurant_id":"40813992"} {"_id":{"$oid":"..."},...,"name":"Acquolina Catering","restaurant_id":"41381423"}
注意
これらのメソッドを呼び出す順序によって、返されるドキュメントは変更されません。 MongoDB PHPライブラリは、最初にソート操作、次にスキップ操作、次に制限操作を実行するために、呼び出しの順序を自動的に並べ替えます。
戻り値の型を指定する
読み取り操作によって返されるドキュメントのデータ型をカスタマイズするには、配列パラメータでtypeMap
オプションを渡します。
デフォルトでは 、 MongoDB\Client
、 MongoDB\Database
、またはMongoDB\Collection
インスタンスで呼び出されるメソッドは、次の型マップを使用します。
[ 'array' => 'MongoDB\Model\BSONArray', 'document' => 'MongoDB\Model\BSONDocument', 'root' => 'MongoDB\Model\BSONDocument', ]
このデフォルトの型マップは、次の変換を実行します。
配列から
MongoDB\Model\BSONArray
オブジェクトへトップレベルと埋め込みBSONドキュメントから
MongoDB\Model\BSONDocument
オブジェクトへ
カスタム タイプMongoDB\BSON\Unserializable
マップでは、 を実装する任意のタイプ、およびarray
stdClass
タイプ、 タイプ、object
タイプへの変換を指定できます。
例
次の例では、 cuisine
値が'Hawaiian'
であるすべてのドキュメントを返し、ドキュメントを配列値に変換するにはtypeMap
オプションを指定します。
$options = [ 'typeMap' => [ 'root' => 'array', 'document' => 'array' ] ]; $cursor = $collection->find(['cuisine' => 'Hawaiian'], $options); foreach ($cursor as $doc) { print_r($doc) . PHP_EOL; }
Array ( [_id] => MongoDB\BSON\ObjectId Object ( [oid] => ... ) [address] => Array ( ... ) [borough] => Manhattan [cuisine] => Hawaiian [grades] => Array ( ... ) [name] => Makana [restaurant_id] => 41509012 ) ...
詳細情報
ドキュメント取得の詳細については、 データ取得ガイドを 参照してください。
クエリの指定の詳細については、「 クエリの指定」ガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。