1. 概要

MongoDBは、データレコードをBSONドキュメントとしてコレクションに格納するNoSQLデータベースです。 複数のデータベースを持つことができ、各データベースには1つ以上のドキュメントのコレクションを含めることができます。

リレーショナルデータベースとは異なり、MongoDBは、構造を定義することなく、挿入されたドキュメントを使用してコレクションを作成します。 このチュートリアルでは、コレクションの存在を確認するさまざまな方法を学習します。 collectionExists、createCollection、listCollectionNames、および count メソッドを使用して、コレクションの存在を確認します。

2. データベース接続

コレクションのデータにアクセスするには、最初にデータベースとの接続を設定する必要があります。 私たちのマシンでローカルに実行されているMongoDBデータベースに接続しましょう。

2.1. MongoClientを使用して接続を作成します

MongoClient は、MongoDBインスタンスとの接続を確立するために使用されるJavaクラスです。

MongoClient mongoClient = new MongoClient("localhost", 27017);

ここでは、ローカルホストのポートデフォルトポート27017で実行されているMongoDBに接続しています。

2.2. データベースに接続する

それでは、MongoClientオブジェクトを使用してデータベースにアクセスしてみましょう。 MongoClientを使用してデータベースにアクセスする方法は2つあります。

まず、 getDatabase メソッドを使用して、baeldungデータベースにアクセスします。

MongoDatabase database = mongoClient.getDatabase("baeldung");

MongoJavaドライバーのgetDBメソッドを使用して、データベースに接続することもできます。

DB db = mongoClient.getDB("baeldung");

getDB メソッドは非推奨であるため、使用することはお勧めしません。

これまで、MongoClientを使用してMongoDBとの接続を設定し、さらにbaeldungデータベースに接続しました。

MongoDBにコレクションが存在するかどうかを確認するために、さまざまなアプローチを詳しく見ていきましょう。

3. DBクラスの使用

MongoDB Javaドライバーは、同期メソッド呼び出しと非同期メソッド呼び出しの両方を提供します。 データベースに接続するには、データベース名を指定するだけです。 データベースが存在しない場合、MongoDBは自動的にデータベースを作成します。

collectionExists メソッドを使用して、コレクションが存在するかどうかを確認できます。

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("baeldung");
String testCollectionName = "student";
System.out.println("Collection Name " + testCollectionName + " " + db.collectionExists(testCollectionName));

ここで、 collectionExists メソッドは、コレクションが存在する場合は true を返し、そうでない場合はfalseを返します。

MongoDBJavaドライバーのcom.mongodb.DBAPIはバージョン3.xから非推奨になりましたが、引き続きアクセスできます。 従って DB クラスを新しいプロジェクトに使用することはお勧めしません。

4. MongoDatabaseクラスの使用

com.mongodb.client.MongoDatabase は、Mongo3.x以降用に更新されたAPIです。 DBクラスとは異なり、MongoDatabaseクラスは、コレクションの存在を確認するための特定のメソッドを提供しません。 しかし、望ましい結果を得るために使用できるさまざまな方法があります。

4.1. createCollectionメソッドの使用

createCollection メソッドは、MongoDBに新しいコレクションを作成します。 ただし、これを使用して、コレクションが存在するかどうかを確認することもできます。

String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
try {
    database.createCollection(testCollectionName);
} catch (Exception exception) {
    System.err.println("Collection:- "+testCollectionName +" already Exists");
}

上記のコードは、新しいコレクション「学生」がデータベースにまだ存在しない場合に作成します。 createCollection メソッドは、コレクションがすでに存在する場合に例外をスローします。

このアプローチは、データベースに新しいコレクションを作成するため、お勧めしません。

4.2. listCollectionNamesメソッドの使用

listCollectionNames メソッドは、データベース内のすべてのコレクション名を一覧表示します。 したがって、この方法を使用して、コレクションの存在の問題を解決できます。

ここで、Javaドライバーコードを使用したlistCollectionNamesメソッドのサンプルコードを調べてみましょう。

String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
boolean collectionExists = database.listCollectionNames()
  .into(new ArrayList()).contains(testCollectionName);
System.out.println("collectionExists:- " + collectionExists);

ここでは、データベース baeldung。内のすべてのコレクション名のリストを繰り返しました。出現するたびに、コレクション文字列名をtestCollectionNameと照合します。 一致が成功するとtrueを返し、それ以外の場合はfalseを返します。

4.3. countメソッドの使用

MongoCollectioncountメソッドは、コレクションに存在するドキュメントの数をカウントします。

回避策として、このメソッドを使用してコレクションの存在を確認できます。 同じもののJavaコードスニペットは次のとおりです。

String databaseName="baeldung";
MongoDatabase database = mongoClient.getDatabase(databaseName);
String testCollectionName = "student";
MongoCollection<Document> collection = database.getCollection(testCollectionName);
Boolean collectionExists = collection.count() > 0 ? true : false;
System.out.println("collectionExists:- " + collectionExists);
Boolean expectedStatus = false;
assertEquals(expectedStatus, collectionExists);

このメソッドは、データのないコレクションが存在する場合は機能しません。その場合、0が返されますが、コレクションは空のデータで存在します。

5. 結論

この記事では、MongoDatabaseおよびDBクラスメソッドを使用してコレクションの存在を確認するさまざまな方法について説明しました。

つまり、com.mongodb.DBクラスのcollectionExistsメソッドとcom.mongodb.client.MongoDatabaselistCollectionNamesメソッドが推奨されます。コレクションの存在を確認します。

いつものように、すべての例のソースコードとコードスニペットは、GitHubから入手できます。