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

MongoDBで配列要素をクエリする方法をわかりやすく解説

MongoDBにおける配列要素のクエリとは

MongoDBは、配列フィールドに格納された要素を柔軟に検索できる点が大きな強みです。配列内に特定の値が含まれているドキュメントを取得したい場合、find()メソッドを使うだけで簡単に実現できます。

基本的な構文は以下のとおりです。

db.yourCollectionName.find({yourArrayFieldName:"yourValue"}).pretty();

この構文では、指定した配列フィールドの中に「yourValue」という値が含まれているすべてのドキュメントが返されます。配列のどの位置に値があっても一致とみなされるため、インデックスを意識せずに検索できるのが便利なポイントです。

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

それでは、実際に動作を確認してみましょう。まず、ドキュメントを含むコレクションを作成します。

> db.queryArrayElementsDemo.insertOne({
    "StudentName":"John","StudentFavouriteSubject":["C","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c90c0354afe5c1d2279d694")
}
> db.queryArrayElementsDemo.insertOne({ "StudentName":"Carol","StudentFavouriteSubject":["C","C++"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c90c0434afe5c1d2279d695")
}
> db.queryArrayElementsDemo.insertOne({ "StudentName":"David","StudentFavouriteSubject":["MongoDB","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c90c0584afe5c1d2279d696")
}

この例では、学生の名前(StudentName)と好きな科目の配列(StudentFavouriteSubject)を持つ3つのドキュメントを挿入しました。

登録済みドキュメントの確認

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

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

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

{
   "_id" : ObjectId("5c90c0354afe5c1d2279d694"),
   "StudentName" : "John",
   "StudentFavouriteSubject" : [
      "C",
      "Java"
   ]
}
{
   "_id" : ObjectId("5c90c0434afe5c1d2279d695"),
   "StudentName" : "Carol",
   "StudentFavouriteSubject" : [
      "C",
      "C++"
   ]
}
{
   "_id" : ObjectId("5c90c0584afe5c1d2279d696"),
   "StudentName" : "David",
   "StudentFavouriteSubject" : [
      "MongoDB",
      "Java"
   ]
}

配列要素を条件にクエリを実行する

次に、配列内に「Java」が含まれるドキュメントだけを抽出してみましょう。

> db.queryArrayElementsDemo.find({StudentFavouriteSubject:"Java"}).pretty();

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

{
   "_id" : ObjectId("5c90c0354afe5c1d2279d694"),
   "StudentName" : "John",
   "StudentFavouriteSubject" : [
      "C",
      "Java"
   ]
}
{
   "_id" : ObjectId("5c90c0584afe5c1d2279d696"),
   "StudentName" : "David",
   "StudentFavouriteSubject" : [
      "MongoDB",
      "Java"
   ]
}

結果のポイント

出力結果を見ると、「StudentFavouriteSubject」配列内に「Java」を含むJohnとDavidの2件のドキュメントのみが返されていることがわかります。Carolのドキュメントには「Java」が含まれていないため、検索対象から除外されました。

このように、MongoDBでは配列フィールドに対して直接値を指定してクエリするだけで、配列内のいずれかの位置にある要素との一致を自動的に判定してくれます。より複雑な条件が必要な場合は、$elemMatch演算子や$all演算子なども活用するとよいでしょう。

  1. MongoDBで配列内の要素を指定して特定のドキュメントを取得する方法

    MongoDBのfind()でドット表記を使った特定ドキュメントの取得MongoDBで配列内に格納されたフィールドの値を条件に、特定のドキュメントだけを取得したい場合は、find()メソッドとドット表記(dot notation)を組み合わせるのが基本です。この記事では、実際のコード例を通して、その手順をわかりやすく解説します。1. サンプルコレクションとドキュメントの作成まずはテスト用のコレクションを作成し、配列の中にオブジェクトを持つドキュメントを挿入してみましょう。insertOne()メソッドを使用して、以下のように3件のドキュメントを登録します。> db.demo672.ins

  2. MongoDBでオブジェクト配列内の特定のネストされたドキュメントをクエリする方法

    MongoDBでオブジェクトの配列からネストされたドキュメントを抽出する オブジェクトの配列に格納されたネストされたドキュメントを条件付きで検索したい場合、find()メソッドに$elemMatch演算子を組み合わせることで、指定した条件に一致する要素だけを取り出すことができます。 ここでは、「StudentAge」フィールドを持つ学生情報だけを配列から抽出する例を見ていきましょう。 1. サンプルコレクションの作成 まず、ドキュメントを挿入してコレクションを作成します。このコレクションには、学生情報がオブジェクトの配列として格納されています。 > db.demo763.insertO