返される結果の数を制限する
Overview
読み取り操作から返されるドキュメントの数を制限するには、 limit
を使用します。 limit
は操作によって返されるドキュメントの最大数の上限として機能しますが、制限に達する数のドキュメントが存在しない場合は、操作によって返されるドキュメントの数が少なくなることがあります。 limit
を skipメソッドで使用すると、最初にスキップが適用され、制限はスキップ後に残ったドキュメントにのみ適用されます。
サンプル ドキュメント
このガイドの例に従うには、次のコード スニペットを使用して、書籍説明のドキュメントを myDB.books
コレクションに挿入します。
const myDB = client.db("myDB"); const myColl = myDB.collection("books"); await myColl.insertMany([ { "_id": 1, "name": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }, { "_id": 2, "name": "Les Misérables", "author": "Hugo", "length": 1462 }, { "_id": 3, "name": "Atlas Shrugged", "author": "Rand", "length": 1088 }, { "_id": 4, "name": "Infinite Jest", "author": "Wallace", "length": 1104 }, { "_id": 5, "name": "Cryptonomicon", "author": "Stephenson", "length": 918 }, { "_id": 6, "name": "A Dance With Dragons", "author": "Martin", "length": 1104 }, ]);
注意
クエリ操作により、一致するドキュメントを含むカーソルへの参照が返される場合があります。カーソルに格納されているデータを調べる方法については、「カーソルの基礎ページ」を参照してください。
Limit
次の例では、コレクションをクエリして、最も長い上位 3 冊の本を返します。クエリ フィルターが空なので、すべてのドキュメントに一致します。次に、length
フィールドに降順sort
を適用して、短いブックの前に長いブックを返し、limit
を適用して最初の 3
件の結果のみを返します。
// define an empty query document const query = {}; // sort in descending (-1) order by length const sort = { length: -1 }; const limit = 3; const cursor = myColl.find(query).sort(sort).limit(limit); for await (const doc of cursor) { console.dir; }
上記のコードの例では、長さ順に並べられた次の 3 つのドキュメントが出力されます。
{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 } { "_id": 6, "title": "A Dance With Dragons", "author": "Martin", "length": 1104 } { "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }
注意
ドライバーは最初にソートし、その後に制限を適用して、呼び出しの順序を並び替えるため、limit
と sort
を呼び出す順序は関係ありません。次の 2 つの呼び出しは同等です。
myColl.find(query).sort({ length: -1 }).limit(3); myColl.find(query).limit(3).sort({ length: -1 });
また、sort
と limit
は、find()
メソッドの呼び出しで options
オブジェクトに指定することで適用することもできます。次の 2 つの呼び出しは同等です。
myColl.find(query).sort({ length: -1 }).limit(3); myColl.find(query, { sort: { length: -1 }, limit: 3 });
options
find()
メソッドの 設定の詳細については、 find() API ドキュメントを参照してください。
スキップ
次の 3 冊の書籍が結果に表示されるようにするには、skip()
メソッドを追加して、バイパスするドキュメント数を次のように渡します。
// define an empty query document const query = {}; // sort in descending (-1) order by length const sort = { length: -1 }; const limit = 3; const skip = 3; const cursor = myColl.find(query).sort(sort).limit(limit).skip(skip); for await (const doc of cursor) { console.dir; }
この操作では、4 冊目から 6 冊目までの書籍について説明するドキュメントが、長いものから短いものの順に返されます。
{ "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 } { "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 } { "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }
この方法でスキップと制限を組み合わせてコレクションのページングを実装すると、コレクションの小さな「スライス」のみが一度に返されます。