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

MongoDBで特定のフィールド名を持つドキュメントを検索する方法($exists演算子の使い方)

MongoDBで、特定のフィールド名(ネストされたフィールドを含む)を持つドキュメントを検索したい場合、$exists演算子を使用します。この演算子を使うことで、指定したフィールドが存在するかどうかを条件としてドキュメントを絞り込むことができます。

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

まず、検索用のサンプルコレクションを作成し、2件のドキュメントを挿入します。

> db.findByFieldName.insertOne({
  "Client": {
    "ClientDetails": {
      "ClientName": "Larry",
      "ClientAge": 29
    },
    "ClientProjectDetails": {
      "ProjectName": "Online Book Store",
      "TeamSize": 10,
      "TechnologyUsed": "Spring Boot"
    }
  }
});
{
  "acknowledged": true,
  "insertedId": ObjectId("5c9e93b2d628fa4220163b64")
}
> db.findByFieldName.insertOne({
  "Client": {
    "ClientDetails": {
      "ClientName": "Chris",
      "ClientAge": 27
    },
    "ClientEducationDetails": {
      "isEducated": true,
      "CollegeName": "M.I.T."
    }
  }
});
{
  "acknowledged": true,
  "insertedId": ObjectId("5c9e9421d628fa4220163b65")
}

このコレクションには、1件目のドキュメントには「ClientProjectDetails」フィールドが、2件目のドキュメントには「ClientEducationDetails」フィールドが含まれており、それぞれ構造が異なります。

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

find()メソッドを使用すると、コレクション内のすべてのドキュメントを確認できます。

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

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

{
  "_id": ObjectId("5c9e93b2d628fa4220163b64"),
  "Client": {
    "ClientDetails": {
      "ClientName": "Larry",
      "ClientAge": 29
    },
    "ClientProjectDetails": {
      "ProjectName": "Online Book Store",
      "TeamSize": 10,
      "TechnologyUsed": "Spring Boot"
    }
  }
}
{
  "_id": ObjectId("5c9e9421d628fa4220163b65"),
  "Client": {
    "ClientDetails": {
      "ClientName": "Chris",
      "ClientAge": 27
    },
    "ClientEducationDetails": {
      "isEducated": true,
      "CollegeName": "M.I.T."
    }
  }
}

$exists演算子でフィールドの有無を条件に検索する

次のクエリでは、「Client.ClientProjectDetails」というネストされたフィールドが存在するドキュメントのみを検索します。

> db.findByFieldName.find({"Client.ClientProjectDetails": {$exists: true}}).pretty();

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

{
  "_id": ObjectId("5c9e93b2d628fa4220163b64"),
  "Client": {
    "ClientDetails": {
      "ClientName": "Larry",
      "ClientAge": 29
    },
    "ClientProjectDetails": {
      "ProjectName": "Online Book Store",
      "TeamSize": 10,
      "TechnologyUsed": "Spring Boot"
    }
  }
}

まとめ

このように、$exists演算子にtrueを指定することで、ネストされたフィールドを含む特定のフィールドが存在するドキュメントだけを抽出できます。ドット表記(「Client.ClientProjectDetails」など)を使えば、階層の深いフィールドも簡単に指定可能です。

なお、$existsにfalseを指定すると、逆に該当フィールドが存在しないドキュメントを取得できます。スキーマが柔軟なMongoDBでは、ドキュメントごとにフィールドの構成が異なるケースが多いため、$exists演算子はデータ検索の際に非常に便利なテクニックです。

  1. MongoDBで特定の文字列を使ってフィールドのすべての値を一括更新する方法

    MongoDBでフィールドのすべての値を一括更新する方法MongoDBのコレクション内に存在するすべてのドキュメントの特定フィールドを、同じ文字列でまとめて更新したい場合があります。そのようなときは、update()メソッドにオプション「multi: true」を指定します。この記事では、実際のコマンド例をもとに、手順をわかりやすく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用コレクション「demo720」に複数のドキュメントを挿入します。> db.demo720.insertOne({SubjectName:MySQL}); {

  2. MongoDBで価格が特定の値未満のレコードを検索する方法($lt演算子の使い方)

    MongoDBで、価格(Price)が特定の値より小さいレコードを検索したい場合には、比較クエリ演算子の一つである $lt(less than)を使用します。$ltは「指定した値より小さい」ドキュメントのみを抽出するための演算子です。この記事では、実際にコレクションを作成し、$lt演算子を使って条件に合致するドキュメントを検索する手順を順番に解説します。1. テスト用コレクションの作成まず、insertOne() メソッドを使って、サンプル用のコレクション「demo728」にドキュメントを挿入します。> db.demo728.insertOne({Price:75}); { ac