1. 概要

この短いチュートリアルでは、MongoDBでフィールドの存在を確認する方法を説明します。

まず、簡単なMongoデータベースとサンプルコレクションを作成します。 次に、ダミーデータをその中に入れて、後で例で使用します。 その後、ネイティブのMongoクエリとJavaにフィールドが存在するかどうかを確認する方法を示します。

2. 構成例

フィールドの存在の確認を開始する前に、後で使用するための既存のデータベース、コレクション、およびダミーデータが必要です。 そのためにMongoシェルを使用します。

まず、Mongoシェルコンテキストをexamplesデータベースに切り替えましょう。

use existence

MongoDBは、最初にデータベースにデータを保存したときにのみデータベースを作成することを指摘しておく価値があります。 usersコレクションに1人のユーザーを挿入します。

db.users.insert({name: "Ben", surname: "Big" })

これで、フィールドが存在するかどうかに関係なく、チェックする必要のあるすべてのものが揃いました。

3. Mongoシェルでのフィールドの存在の確認

Mongo Shellやその他のデータベースコンソールなどで、基本的なクエリを使用して特定のフィールドの存在を確認する必要がある場合があります。 幸いなことに、Mongoはその目的のために特別なクエリ演算子 $examplesを提供しています。

db.users.find({ 'name' : { '$exists' : true }})

標準のfind Mongoメソッドを使用します。このメソッドでは、探しているフィールドを指定し、 $examplesクエリ演算子を使用します。 nameフィールドがusersコレクションに存在する場合、そのフィールドを含むすべての行が返されます。

[
  {
    "_id": {"$oid": "6115ad91c4999031f8e6f582"},
    "name": "Ben",
    "surname": "Big"
  }
]

フィールドが欠落している場合、空の結果が得られます。

4. Javaでのフィールドの存在の確認

Javaでフィールドの存在を確認するための可能な方法を実行する前に、必要なMongo依存関係をプロジェクトに追加しましょう。 Mavenの依存関係は次のとおりです。

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.12.10</version>
</dependency>

そして、これがGradleバージョンです。

implementation group: 'org.mongodb', name: 'mongo-java-driver', version: '3.12.10'

最後に、exitenceデータベースとusersコレクションに接続しましょう。

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("existence");
MongoCollection<Document> collection = db.getCollection("users");

4.1. フィルタの使用

com.mongodb.client.model.Filters は、多くの便利なメソッドを含むMongo依存関係のutilクラスです。 この例では、 exits()メソッドを使用します。

Document nameDoc = collection.find(Filters.exists("name")).first();
assertNotNull(nameDoc);
assertFalse(nameDoc.isEmpty());

まず、 users コレクションから要素を見つけて、最初に見つかった要素を取得しようとします。 指定されたフィールドが存在する場合、応答としてnameDocドキュメントを取得します。 nullでも空でもありません。

ここで、存在しないフィールドを見つけようとするとどうなるか見てみましょう。

Document nameDoc = collection.find(Filters.exists("non_existing")).first();
assertNull(nameDoc);

要素が見つからない場合、応答としてnullドキュメントを取得します。

4.2. ドキュメントクエリの使用

com.mongodb.client.model.Filters クラスは、フィールドの存在を確認する唯一の方法ではありません。 com.mongodb.BasicDBObject:のインスタンスを使用できます

Document query = new Document("name", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNotNull(doc);
assertFalse(doc.isEmpty());

動作は前の例と同じです。 要素が見つかった場合、空ではない null Documentを受け取ります。

存在しないフィールドを見つけようとする状況でも、コードは同じように動作します。

Document query = new Document("non_existing", new BasicDBObject("$exists", true));
Document doc = collection.find(query).first();
assertNull(doc);

要素が見つからない場合は、応答として null Documentを取得します。

5. 結論

この記事では、MongoDBでフィールドの存在を確認する方法について説明しました。 まず、Mongoデータベース、コレクションの作成方法、およびダミーデータの挿入方法を示しました。 次に、基本的なクエリを使用して、Mongoシェルにフィールドが存在するかどうかを確認する方法を説明しました。 最後に、com.mongodb.client.model.FiltersDocumentクエリアプローチを使用してフィールドの存在を確認する方法を説明しました。

いつものように、記事の完全なソースコードは、GitHubから入手できます。