MongoDBでフィールドの存在を確認する方法は?
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.FiltersとDocumentクエリアプローチを使用してフィールドの存在を確認する方法を説明しました。
いつものように、記事の完全なソースコードは、GitHubでから入手できます。