Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ / /

返される結果の数を制限する

項目一覧

  • Overview
  • サンプル ドキュメント
  • Limit
  • スキップ

読み取り操作から返されるドキュメントの数を制限するには、 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 },
]);

注意

クエリ操作により、一致するドキュメントを含むカーソルへの参照が返される場合があります。カーソルに格納されているデータを調べる方法については、「カーソルの基礎ページ」を参照してください。

次の例では、コレクションをクエリして、最も長い上位 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 }

注意

ドライバーは最初にソートし、その後に制限を適用して、呼び出しの順序を並び替えるため、limitsort を呼び出す順序は関係ありません。次の 2 つの呼び出しは同等です。

myColl.find(query).sort({ length: -1 }).limit(3);
myColl.find(query).limit(3).sort({ length: -1 });

また、sortlimit は、find() メソッドの呼び出しで options オブジェクトに指定することで適用することもできます。次の 2 つの呼び出しは同等です。

myColl.find(query).sort({ length: -1 }).limit(3);
myColl.find(query, { sort: { length: -1 }, limit: 3 });

optionsfind()メソッドの 設定の詳細については、 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 }

この方法でスキップと制限を組み合わせてコレクションのページングを実装すると、コレクションの小さな「スライス」のみが一度に返されます。

戻る

返された結果をスキップする