MongoDBで一部のドキュメントをスキップするには?skip()とlimit()の使い方
はい、MongoDBでは skip() メソッドを使用することで、一部のドキュメントをスキップできます。さらに limit() メソッドと組み合わせれば、スキップした後に表示したいドキュメントの件数を自由に指定することも可能です。本記事では、実際のコード例を交えながら、具体的な使い方を解説します。
コレクションの作成とドキュメントの挿入
まずは動作を確認するため、サンプル用のコレクションを作成し、複数のドキュメントを挿入してみましょう。
> db.demo682.insertOne({FirstName:"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462a804263e90dac94402")
}
> db.demo682.insertOne({FirstName:"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462ac04263e90dac94403")
}
> db.demo682.insertOne({FirstName:"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462af04263e90dac94404")
}
> db.demo682.insertOne({FirstName:"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462b304263e90dac94405")
}
> db.demo682.insertOne({FirstName:"Adam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462ba04263e90dac94406")
}
> db.demo682.insertOne({FirstName:"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462be04263e90dac94407")
}
> db.demo682.insertOne({FirstName:"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462c404263e90dac94408")
}find()ですべてのドキュメントを表示する
find() メソッドを使用すると、コレクション内のすべてのドキュメントを確認できます。
> db.demo682.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ea462a804263e90dac94402"), "FirstName" : "John" }
{ "_id" : ObjectId("5ea462ac04263e90dac94403"), "FirstName" : "Sam" }
{ "_id" : ObjectId("5ea462af04263e90dac94404"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5ea462b304263e90dac94405"), "FirstName" : "David" }
{ "_id" : ObjectId("5ea462ba04263e90dac94406"), "FirstName" : "Adam" }
{ "_id" : ObjectId("5ea462be04263e90dac94407"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5ea462c404263e90dac94408"), "FirstName" : "Carol" }合計7件のドキュメントが登録されていることがわかります。
skip()とlimit()を組み合わせたクエリ
それでは本題です。以下は、最初の3件のドキュメントをスキップし、その後の2件だけを表示するクエリの例です。
> db.demo682.find().skip(3).limit(2);
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5ea462b304263e90dac94405"), "FirstName" : "David" }
{ "_id" : ObjectId("5ea462ba04263e90dac94406"), "FirstName" : "Adam" }先頭の「John」「Sam」「Bob」の3件がスキップされ、「David」と「Adam」の2件のみが返されていることが確認できます。
補足:ページネーションへの応用と注意点
skip() と limit() の組み合わせは、Webアプリケーションのページネーション(ページ送り)機能を実装する際によく使われます。例えば、1ページあたり10件表示する場合、2ページ目は .skip(10).limit(10)、3ページ目は .skip(20).limit(10) のように指定します。
ただし、skip() に大きな数値を指定すると、スキップ対象のドキュメントも内部でスキャンするため、大量データではパフォーマンスが低下する点に注意が必要です。大規模なコレクションを扱う場合は、範囲クエリ($gt など)やインデックスを活用した代替手段を検討するとよいでしょう。
-
MongoDBでフィールドごとにドキュメントをグループ化して取得する方法
MongoDBで特定のフィールドを基準にドキュメントをグループ化して取得したい場合は、集計(Aggregation)パイプラインの $group と $project を組み合わせるのが基本です。この記事では、実際にコレクションを作成しながら、その手順を具体的に解説します。 1. サンプルコレクションの作成 まず、insertOne() メソッドを使って demo540 コレクションに複数のドキュメントを挿入します。 > db.demo540.insertOne({id:1,Name:Chris,CountryName:US}); { acknowledged : true,
-
MongoDBで埋め込みドキュメント(配列内のサブドキュメント)をクエリする方法
MongoDBの埋め込みドキュメントをクエリするには?MongoDBでは、ドキュメントの中に配列として埋め込まれたサブドキュメントをクエリする場合、aggregate()メソッドを使用するのが効果的です。この記事では、$unwindと$matchを組み合わせて、埋め込みドキュメントから条件に合うデータを抽出する手順を解説します。1. サンプルコレクションの作成まずは、学生情報を配列として持つドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使ってドキュメントを挿入します。> db.demo705.insertOne( ... { ...