MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでフィールドの存在を確認する方法:$exists演算子の使い方を解説

MongoDBでは、$exists 演算子を使用することで、ドキュメント内に特定のフィールドが存在するかどうかを簡単に確認できます。この記事では、実際にコレクションを作成しながら、$exists 演算子の基本的な使い方を具体例とともに解説します。

サンプルコレクションの作成

まず、動作を理解するために、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行して、コレクションにドキュメントを挿入します。

> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Larry"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba4136de59bd9de063a1")
}
> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"John","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba4e36de59bd9de063a2")
}
> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Chris","StudentAge":24,"StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba6536de59bd9de063a3")
}

> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Robert","StudentAge":21,"StudentCountryName":"UK","StudentHobby":["Teaching","Photography"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba9d36de59bd9de063a4")
}

このサンプルでは、4つの学生ドキュメントを作成しました。それぞれのドキュメントは持っているフィールドが異なり、Larry のドキュメントには「StudentName」のみ、Robert のドキュメントには「StudentHobby」など複数のフィールドが含まれています。このようにフィールド構成が不揃いなデータこそ、$exists 演算子が活躍する場面です。

登録したドキュメントの確認

find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。

> db.checkFieldExistsOrNotDemo.find().pretty();

実行結果は以下の通りです。

{ "_id" : ObjectId("5c92ba4136de59bd9de063a1"), "StudentName" : "Larry" }
{
   "_id" : ObjectId("5c92ba4e36de59bd9de063a2"),
   "StudentName" : "John",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5c92ba6536de59bd9de063a3"),
   "StudentName" : "Chris",
   "StudentAge" : 24,
   "StudentCountryName" : "US"
}
{
   "_id" : ObjectId("5c92ba9d36de59bd9de063a4"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "UK",
   "StudentHobby" : [
      "Teaching",
      "Photography"
   ]
}

$exists 演算子でフィールドの存在をチェックする

それでは、MongoDBでフィールドが存在するかどうかを確認するクエリを見ていきましょう。ケースごとに分けて説明します。

ケース1:フィールドが存在する場合

「StudentHobby」フィールドを持つドキュメントを検索するには、次のように { $exists: true } を指定します。

> db.checkFieldExistsOrNotDemo.find({ 'StudentHobby' : { '$exists' : true }}).pretty();

実行結果は以下の通りです。「StudentHobby」フィールドを持つのは Robert のドキュメントだけなので、その1件のみが返されます。

{
   "_id" : ObjectId("5c92ba9d36de59bd9de063a4"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "UK",
   "StudentHobby" : [
      "Teaching",
      "Photography"
   ]
}

ケース2:フィールドが存在しない場合

逆に、存在しないフィールド(ここでは例として「StudentTechnicalSubject」)に対して $exists: true を指定して検索するとどうなるでしょうか。

> db.checkFieldExistsOrNotDemo.find({ 'StudentTechnicalSubject' : { '$exists' : true }}).pretty();

どのドキュメントにもこのフィールドは存在しないため、検索結果は何も表示されません(空の結果セットが返ります)。

補足:存在しないフィールドを検索する方法

$exists 演算子は false を指定することもできます。{ 'フィールド名': { '$exists': false } } と記述すると、「そのフィールドを持たないドキュメント」だけを抽出できます。例えば、上記のコレクションで { 'StudentHobby': { '$exists': false } } を実行すると、Larry・John・Chris の3件が該当します。

まとめ

MongoDBでフィールドの有無を確認する際は、$exists 演算子を使うのが基本です。ポイントを整理すると以下の通りです。

  • { フィールド名: { $exists: true } } … 指定したフィールドを持つドキュメントを取得
  • { フィールド名: { $exists: false } } … 指定したフィールドを持たないドキュメントを取得
  • フィールドが存在しても値が null の場合は注意が必要。null 値を除外したい場合は $ne: null との組み合わせを検討しましょう

スキーマが柔軟なMongoDBならではの課題である「フィールドの有無の判定」を、$exists 演算子を使いこなして効率的に解決しましょう。

  1. JavaScriptで数値が有限かどうかを確認する方法とは?isFinite()メソッドの使い方を解説

    JavaScriptには、指定された値が有限の数値であるかどうかを判定するためのisFinite()メソッドが用意されています。引数に渡した値が数値であれば、文字列形式(例えば123など)であってもtrueが返され、数値として評価できない場合はfalseが返ります。ここでは、その基本的な使い方を具体例とともに詳しく見ていきましょう。 基本構文 isFinite(value); このメソッドは引数として1つの値を受け取ります。渡された値が有限の数値と評価できればブール値のtrueを返し、それ以外の場合はfalseを返します。 サンプルコード1:数値を渡す場合 次の例では、整数や負の小数、0

  2. Swiftでテキストフィールド(UITextField)が空かどうかを簡単に確認する方法

    Swiftでテキストフィールドが空かどうかを確認する基本Swiftでは、テキストフィールド(UITextField)が空かどうかを判定するのは非常に簡単です。ポイントは2段階のチェックです。まずテキストフィールドに値が存在するか(nilでないか)を確認し、その上で文字列が空文字かどうかを見ます。ここでは、テキストフィールドの変数名を myTextField として説明します。以下のように記述できます。if let text = myTextField.text, !text.isEmpty {    // テキストフィールドに文字が入力されている} el