MongoDBでネストされたJSON配列から値を取得する方法
MongoDBでは、ドット記法(dot notation)を使うことで、ネストされたJSON配列の中から特定の値を持つドキュメントを簡単に検索できます。この記事では、実際のコード例を通じて、ネストされた配列フィールドへのクエリの書き方を解説します。
基本構文
ネストされたJSON配列から値を取得するには、以下のような構文を使用します。外側のフィールド名から順に、ドット(.)でつなげて目的のフィールドまでパスを指定します。
db.yourCollectionName.find({"yourOuterFieldName.yourInnerFieldName.yourNextInnerFieldName...N": "yourValue"}).pretty();
サンプルコレクションの作成
まず、ネストされたJSON配列を含むドキュメントを持つコレクションを作成しましょう。ここでは「nestedJSONArrayDemo」というコレクションに、顧客情報を格納した2件のドキュメントを挿入します。
> db.nestedJSONArrayDemo.insertOne({
... "ClientDetails" :
... {
... "ClientPersonalDetails" : [
... { "CountryName" : "US" },
... { "CountryName" : "AUS"},
... { "ClientName":"Chris" },
... { "ClientName":"David" }
... ]
... }
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2cbb2b64f4b851c3a13bc")
}
> db.nestedJSONArrayDemo.insertOne({
... "ClientDetails" :
... {
... "ClientPersonalDetails" : [
... { "CountryName" : "Belgium" },
... { "CountryName" : "Canada"},
... { "CountryName" : "Egypt"}
... ]
... }
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2cc14b64f4b851c3a13bd")
}
上記の例では、「ClientDetails」というオブジェクトの中に「ClientPersonalDetails」という配列があり、その中にさらにオブジェクトが格納された、3階層のネスト構造になっています。
登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.nestedJSONArrayDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd2cbb2b64f4b851c3a13bc"),
"ClientDetails" : {
"ClientPersonalDetails" : [
{
"CountryName" : "US"
},
{
"CountryName" : "AUS"
},
{
"ClientName" : "Chris"
},
{
"ClientName" : "David"
}
]
}
}
{
"_id" : ObjectId("5cd2cc14b64f4b851c3a13bd"),
"ClientDetails" : {
"ClientPersonalDetails" : [
{
"CountryName" : "Belgium"
},
{
"CountryName" : "Canada"
},
{
"CountryName" : "Egypt"
}
]
}
}
ネストされた配列から値を検索する
それでは、ネストされたJSON配列から値を取得するクエリを実行します。ここでは「CountryName」が「Canada」であるドキュメントを検索します。ポイントは、「親フィールド.子フィールド.孫フィールド」のようにドットでパスをつなぐことです。
> db.nestedJSONArrayDemo.find({"ClientDetails.ClientPersonalDetails.CountryName": "Canada"}).pretty();
このクエリを実行すると、以下の出力が得られます。
{
"_id" : ObjectId("5cd2cc14b64f4b851c3a13bd"),
"ClientDetails" : {
"ClientPersonalDetails" : [
{
"CountryName" : "Belgium"
},
{
"CountryName" : "Canada"
},
{
"CountryName" : "Egypt"
}
]
}
}
まとめ
MongoDBでネストされたJSON配列内の値を検索する場合、配列のインデックスを意識せずとも、ドット記法で「フィールドパス」を指定するだけで自動的に配列内の全要素が走査されます。条件に一致する要素が配列内のどこかに存在すれば、そのドキュメント全体が結果として返されます。この仕組みを理解しておくと、深くネストされたドキュメント構造でも柔軟にデータを抽出できるようになります。
-
MongoDBのコレクションからデータを取得する方法(findOne()の使い方)
MongoDBのコレクションからデータを取得するには?MongoDBでコレクションから単一のドキュメントを取得したい場合は、findOne()メソッドを使用します。本記事では、サンプルコレクションを作成し、その中から特定の条件に一致するデータを取り出すまでの手順を順番に解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、学生情報のドキュメントを複数件持つコレクション「demo463」を作成します。> db.demo463.insertOne({StudentName:Chris Brown,StudentAge:21,StudentCountryNa
-
MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ
MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..