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

【MongoDB】find()と$exists演算子でフィールドに値が存在するか確認する方法

MongoDBのドキュメントにおいて、特定のフィールドに値が存在するかどうかを確認するには、find()メソッドと$exists演算子を組み合わせて使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。

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

以下の例では、プレイヤー名(PlayerName)とスコアの配列(PlayerScores)を持つドキュメントを4件挿入しています。後の検証用に、意図的に空の配列を持つドキュメントも含めている点に注目してください。

> db.checkIfValueDemo.insertOne({"PlayerName":"John Smith","PlayerScores":[5000,98595858,554343]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc6f507af8e7a4ca6b2ad98")
}
> db.checkIfValueDemo.insertOne({"PlayerName":"John Doe","PlayerScores":[]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc6f512af8e7a4ca6b2ad99")
}
> db.checkIfValueDemo.insertOne({"PlayerName":"Carol Taylor","PlayerScores":[7848474,8746345353]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc6f521af8e7a4ca6b2ad9a")
}
> db.checkIfValueDemo.insertOne({"PlayerName":"David Miller","PlayerScores":[]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc6f531af8e7a4ca6b2ad9b")
}

コレクション内のすべてのドキュメントを表示する

作成したコレクションの内容を確認するため、find()メソッドですべてのドキュメントを表示します。

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

実行結果は次のようになります。

{
   "_id" : ObjectId("5cc6f507af8e7a4ca6b2ad98"),
   "PlayerName" : "John Smith",
   "PlayerScores" : [
      5000,
      98595858,
      554343
   ]
}
{
   "_id" : ObjectId("5cc6f512af8e7a4ca6b2ad99"),
   "PlayerName" : "John Doe",
   "PlayerScores" : [ ]
}
{
   "_id" : ObjectId("5cc6f521af8e7a4ca6b2ad9a"),
   "PlayerName" : "Carol Taylor",
   "PlayerScores" : [
      7848474,
      8746345353
   ]
}
{
   "_id" : ObjectId("5cc6f531af8e7a4ca6b2ad9b"),
   "PlayerName" : "David Miller",
   "PlayerScores" : [ ]
}

$exists演算子で値の存在を確認する

それでは本題です。フィールドに実際に値が存在するかどうかを確認するには、'PlayerScores.0' のように配列の先頭インデックス(0番目)に対して $exists 演算子を適用します。これにより、空の配列([ ])を持つドキュメントを除外できます。

> db.checkIfValueDemo.find({'PlayerScores.0' : {$exists: true}}).count();

実行結果:

2

結果は「2」となりました。これは、PlayerScoresフィールドに実際に値が格納されているドキュメントが2件(John Smith と Carol Taylor)であることを意味します。空の配列を持つ John Doe と David Miller は正しく除外されています。

補足:$exists演算子のポイント

$exists は、フィールドそのものの存在有無を判定する演算子です。{$exists: true} で指定フィールドが存在するドキュメントのみを、{$exists: false} で存在しないドキュメントのみを取得できます。

ただし注意点として、フィールドの値が null の場合でも $exists: true に該当してしまいます。nullを除外したい場合は、$ne: null$type 演算子などを併用するとよいでしょう。また、配列の場合は上記のように「フィールド名.0」でインデックスを指定することで、「少なくとも1つの要素が存在するか」を簡潔に判定できます。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBで配列内の重複要素を検出・確認する方法

    MongoDBで配列内の重複要素を検出・確認する方法配列フィールドの中に重複した要素が存在するかどうかを確認したい場合、MongoDBではaggregate()メソッドを使用します。本記事では、実際のサンプルコードを通じて、集計パイプライン(アグリゲーションフレームワーク)を使った重複検出の手順をわかりやすく解説します。1. サンプルコレクションの作成まず、テスト用のドキュメントを挿入してコレクションを作成しましょう。意図的に重複を含む配列を持つドキュメントも用意します。> db.demo756.insertOne({SubjectName:[MySQL,MongoDB,Java]});