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

返すドキュメントを指定する

項目一覧

  • Overview
  • サンプル データ
  • Limit
  • Sort
  • スキップ
  • 制限、ソート、スキップの組み合わせ
  • 戻り値の型を指定する
  • 詳細情報
  • API ドキュメント

このガイドでは、次のオプションを 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オプションを設定する配列を作成し、その配列を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オプションを設定する配列を作成します。 このオプションを設定する場合、結果を とソート方向でソートするためのフィールドを含めます。 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"}
...

単一のオプション配列でlimitsortskipオプションを設定し、その配列を 読み取り操作のパラメーターとして渡すことができます。 これにより、返されるソートされたドキュメントの最大数を設定して、返される前に指定された数のドキュメントをスキップできます。

次の例では、 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\ClientMongoDB\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 ドキュメントを参照してください。

戻る

ドキュメントをカウント