JavaでmongoDBの基本的な操作まとめ(select, insert, update, delete)
目次
こんにちは。ぐっさんです。
NoSQLでは、有名なmongoDBがあります。Javaでいろいろ操作してみようと思ったのですが、思ったよりインターネットに情報がなく、情報があっても拡散していたので、備忘もかねてブログに書こうと思いました。
mongoDBの概要
MongoDBはRDBMSではなく、いわゆるNoSQLと呼ばれるデータベースに分類されるものである。RDBMSのようにレコードをテーブルに格納するのではなく、「ドキュメント」と呼ばれる構造的データをJSONライクな形式で表現し、そのドキュメントの集合を「コレクション」として管理する(このデータの物理的な格納はBSONと呼ばれるJSONのバイナリ版といえる形式で行われる)。
コネクションの取得
まずは、mongoDBのサーバーのコネクションを取得します。
MongoClient mongoClient = MongoClients.create(connectionString);
コレクションの取得
コネクションが取得できたら、対象のデータベースからコレクションオブジェクトを取得します。
MongoCollection<Document> collection = mongoClient.getDatabase("{db_name}").getCollection("{collection_name}");
ここまで来たら、準備は完了です。次から、一般的な検索・登録・更新・削除を紹介してきます。
ドキュメント件数の取得
レコード件数は、下記で取得できます。Filtersクラスを使用することで、条件を指定します。使用方法としては、下記のimportを行い、eq(equal)やne(not equal)、gt(greater than)、lt(less than)などで条件を指定します。
import static com.mongodb.client.model.Filters.*;
子要素の条件指定では、ドットで繋ぐことで指定することができます。
long documentCount = collection.countDocuments(Filters.and( gte("time", checkTimeStr), eq("parentCode", parentCode), eq("child.childCode", childCode) ));
ドキュメントの取得
ドキュメントは、下記で登録できます。ドキュメント件数の取得と同様にFilterクラスを使用して、条件を指定します。
JSONObject result = null; MongoCursor<Document> curosr = collection .find(Document.parse("{\"time\":\"" + checkTimeStr + "}")) .sort(Document.parse("{time:-1}")) .limit(1) .iterator(); while (curosr.hasNext()) { result = new JSONObject(curosr.next().toJson()); } curosr.close();
ドキュメントの登録
コレクションオブジェクトのinsertOneメソッドでドキュメントを登録します。
JSONObject insertObj = new JSONObject(); collection.insertOne(Document.parse(insertObj .toString()));
ドキュメントの更新
ドキュメントは、下記で更新できます。コレクションオブジェクトのreplaceOneメソッドで更新します。
JSONObject updatedRecord = new JSONObject(result.toString()); updatedRecord.put("time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"))); updatedRecord.getJSONObject("data").put("status", "updated"); collection.replaceOne(Document.parse(result.toString()).toBsonDocument(),Document.parse(updatedRecord.toString())).toString());
ドキュメントの削除
ドキュメントの削除は、コレクションクラスのdeleteManyで引数に条件を指定して、削除します。
collection.deleteMany(Document.parse("{\"time\":{$gte:\"2023-06-28T00:00:00.000\"}}"));
さいごに
まずは、mongoDBの処理の一例を紹介してみました。他にも多くのメソッドが用意されてますので、処理に応じて試してみてください。
それでは、良いmongoDBライフを!
《関連記事》