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

MongoDBでネストされた文字列の配列をクエリする方法(ドット記法の使い方)

MongoDBでは、ネストされた文字列の配列をクエリしたい場合、ドット(.)記法を使用することで簡単に実現できます。この記事では、実際にコレクションを作成し、ドット記法を使ってネストされた文字列配列を検索する手順を解説します。

1. サンプルデータの準備

まず、insertOne() メソッドを使って、ドキュメントを含むコレクション「nestedStringDemo」を作成しましょう。各ドキュメントには顧客名や年齢、勤務先情報などが含まれ、その中に「ProjectName」という文字列の配列がネストされています。

> db.nestedStringDemo.insertOne(
    {
       "CustomerName": "John",
       "CustomerOtherDetails": [ { "Age":29, "CountryName": "US" },
       { "CompanyName": "Amazon",
       "Salary": 150000, "ProjectName": ["Online Library Management System", "Pig Dice Game"]
    } ] }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cea4629ef71edecf6a1f690")
}
> db.nestedStringDemo.insertOne(
{
   "CustomerName": "Chris",
   "CustomerOtherDetails": [ { "Age":27, "CountryName": "AUS" },
   { "CompanyName": "Google",
      "Salary": 250000, "ProjectName": ["Chat Application", "Game Design"]
   } ] }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cea466eef71edecf6a1f691")
}

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

find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。pretty() を組み合わせることで、読みやすい整形された形式で出力されます。

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

上記クエリを実行すると、以下のような出力結果が得られます。

{
   "_id" : ObjectId("5cea4629ef71edecf6a1f690"),
   "CustomerName" : "John",
   "CustomerOtherDetails" : [
      {
         "Age" : 29,
         "CountryName" : "US"
      },
      {
         "CompanyName" : "Amazon",
         "Salary" : 150000,
         "ProjectName" : [
            "Online Library Management System",
            "Pig Dice Game"
         ]
      }
   ]
}
{
   "_id" : ObjectId("5cea466eef71edecf6a1f691"),
   "CustomerName" : "Chris",
   "CustomerOtherDetails" : [
      {
         "Age" : 27,
         "CountryName" : "AUS"
      },
      {
         "CompanyName" : "Google",
         "Salary" : 250000,
         "ProjectName" : [
            "Chat Application",
            "Game Design"
         ]
      }
   ]
}

3. ドット記法でネストされた文字列配列を検索する

それでは本題です。ネストされた文字列の配列を検索するには、「親フィールド.子フィールド」の形式でパスを指定します。ここでは「CustomerOtherDetails.ProjectName」に対して「Chat Application」という値で検索してみましょう。

> db.nestedStringDemo.find({"CustomerOtherDetails.ProjectName":"Chat Application"}).pretty();

実行結果は以下のとおりです。条件に一致するのは Chris のドキュメントのみであることがわかります。

{
   "_id" : ObjectId("5cea466eef71edecf6a1f691"),
   "CustomerName" : "Chris",
   "CustomerOtherDetails" : [
      {
         "Age" : 27,
         "CountryName" : "AUS"
      },
      {
         "CompanyName" : "Google",
         "Salary" : 250000,
         "ProjectName" : [
            "Chat Application",
            "Game Design"
         ]
      }
   ]
}

ポイントまとめ

  • ネストされたフィールドへアクセスする際はドット(.)記法を使い、パスを「CustomerOtherDetails.ProjectName」のように指定します。
  • MongoDBでは、配列内の要素に対しても通常のフィールドと同じように等価条件でマッチングできます。指定した値が配列内のいずれかの要素と一致すれば、そのドキュメントがヒットします。
  • 複数階層にネストされている場合も、同様にドットで連結したパスを指定するだけで柔軟に検索可能です。

このように、ドット記法を活用すれば、MongoDBでネストされた文字列の配列を直感的かつ効率的にクエリできます。ぜひ実際のコレクションでも試してみてください。

  1. MongoDBで配列内の単一の値を文字列に置き換える方法

    MongoDBで配列内の特定の要素だけを別の文字列に置き換えたい場合、$set 演算子と位置演算子($)を組み合わせて使用します。この記事では、実際のコード例を通じてその手順をわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成します。> db.demo564.insertOne({StudentName:[Chris,David,Mike,Sam]});{ acknowledged : true, insertedId : ObjectId(5e90880a39cfeaa

  2. MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法

    MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: