JavaでMongoDBからデータを取得する際にドキュメントをスキップする方法
MongoDBコレクションからレコードを取得する際、skip()メソッドを使うと、検索結果の先頭から指定した件数のドキュメントを読み飛ばすことができます。Webアプリケーションのページネーション(ページ送り)機能などを実装する際に非常に便利なメソッドです。
基本構文
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
JavaのMongoDBライブラリにも同名のskip()メソッドが用意されています。find()メソッドの実行結果に対してこのメソッドを呼び出し、引数として「スキップしたいレコード数」を表す整数値を渡すだけで、簡単にドキュメントをスキップできます。
skip()メソッドのポイント
- skip(n) を指定すると、先頭の n 件が読み飛ばされ、それ以降のドキュメントが返されます。
- limit() と組み合わせることで、「n件目からm件だけ取得する」といったページング処理が実現できます。
- 引数に0を指定した場合は、すべてのドキュメントがそのまま返されます。
サンプルコード
以下は、JavaプログラムからMongoDBのコレクションに5件のドキュメントを挿入し、skip(2)を使って先頭の2件をスキップして残りのドキュメントを取得する例です。
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
public class SkipRecords {
public static void main( String args[] ) {
// MongoDBクライアントの作成
MongoClient mongo = new MongoClient( "localhost" , 27017 );
// データベースへの接続
MongoDatabase database = mongo.getDatabase("myDatabase");
// コレクションオブジェクトの作成
MongoCollection<Document>collection = database.getCollection("students");
Document document1 = new Document("name", "Ram").append("age", 26).append("city", "Hyderabad");
Document document2 = new Document("name", "Robert").append("age", 27).append("city", "Vishakhapatnam");
Document document3 = new Document("name", "Rhim").append("age", 30).append("city", "Delhi");
Document document4 = new Document("name", "Radha").append("age", 28).append("city", "Mumbai");
Document document5 = new Document("name", "Ramani").append("age", 45).append("city", "Pune");
// 作成したドキュメントの一括挿入
List<Document> list = new ArrayList<Document>();
list.add(document1);
list.add(document2);
list.add(document3);
list.add(document4);
list.add(document5);
collection.insertMany(list);
System.out.println("Documents Inserted");
// コレクションオブジェクトの取得
collection = database.getCollection("students");
// 先頭2件をスキップしてドキュメントを取得
FindIterable<Document> iterDoc = collection.find().skip(2);
Iterator it = iterDoc.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}実行結果
Documents Inserted
Document{{_id=5e8886f97631225872d13217, name=Rhim, age=30, city=Delhi}}
Document{{_id=5e8886f97631225872d13218, name=Radha, age=28, city=Mumbai}}
Document{{_id=5e8886f97631225872d13219, name=Ramani, age=45, city=Pune}}このように、挿入した5件のうち最初の2件(Ram、Robert)がスキップされ、3件目以降のドキュメント(Rhim、Radha、Ramani)のみが出力されていることが確認できます。
limit()との組み合わせでページネーションを実現
skip()はlimit()と組み合わせることで、ページネーション処理を簡単に実装できます。例えば「1ページあたり10件表示」の場合、2ページ目を取得するには次のように記述します。
// 1ページ10件のとき、2ページ目(11件目〜20件目)を取得する例 FindIterable<Document> iterDoc = collection.find().skip(10).limit(10);
このように、skip()で開始位置を指定し、limit()で取得件数を制限することで、効率的なデータ取得が可能になります。
-
JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順
CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各
-
Javaでプロパティファイルからデータを読み取る方法を解説
JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー