MongoDBでネストされたサブデータにアクセスして特定のドキュメントを取得する方法
MongoDBでは、ドキュメントの中にさらにネストされた構造(サブドキュメント)を持たせることができます。このようなサブデータ(ネストされたフィールド)にアクセスするには、「ドット表記(dot notation)」を使ってキーを指定します。
本記事では、実際にコレクションを作成しながら、ネストされたデータへのアクセス方法と、特定の条件に一致するドキュメントを取得する方法を解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ネストされた構造を持つドキュメントを含むコレクション「demo450」を作成します。
> db.demo450.insertOne({"Information":{"StudentDetails":{"StudentName":"Chris","StudentAge":21}}});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7b590e71f552a0ebb0a6e6")
}
> db.demo450.insertOne({"Information":{"StudentDetails":{"StudentName":"David","StudentAge":23}}});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7b591a71f552a0ebb0a6e7")
}
> db.demo450.insertOne({"Information":{"StudentDetails":{"StudentName":"Mike","StudentAge":22}}});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7b592271f552a0ebb0a6e8")
}この例では、各ドキュメントは次のような階層構造になっています。
- トップレベル:
Information - 第2階層:
Information.StudentDetails - 第3階層:
Information.StudentDetails.StudentNameおよびInformation.StudentDetails.StudentAge
2. コレクション内の全ドキュメントを表示する
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo450.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e7b590e71f552a0ebb0a6e6"), "Information" : { "StudentDetails" : { "StudentName" : "Chris", "StudentAge" : 21 } } }
{ "_id" : ObjectId("5e7b591a71f552a0ebb0a6e7"), "Information" : { "StudentDetails" : { "StudentName" : "David", "StudentAge" : 23 } } }
{ "_id" : ObjectId("5e7b592271f552a0ebb0a6e8"), "Information" : { "StudentDetails" : { "StudentName" : "Mike", "StudentAge" : 22 } } }3. ドット表記でサブデータにアクセスする
ネストされたフィールドにアクセスするには、各階層のキーをドット(.)でつなげて指定します。例えば、Information の中の StudentDetails の中の StudentName にアクセスする場合は、"Information.StudentDetails.StudentName" と記述します。
以下は、学生名が「David」であるドキュメントだけを抽出するクエリです。
> db.demo450.find({"Information.StudentDetails.StudentName":"David"});実行結果は次のとおりです。
{ "_id" : ObjectId("5e7b591a71f552a0ebb0a6e7"), "Information" : { "StudentDetails" : { "StudentName" : "David", "StudentAge" : 23 } } }まとめ
MongoDBでネストされたサブデータにアクセスする際のポイントは以下の通りです。
- サブドキュメントのフィールドにはドット表記(例:
"Information.StudentDetails.StudentName")でアクセスできる。 find()メソッドの検索条件にドット表記のキーを指定することで、特定の条件に一致するドキュメントのみを取得できる。- クエリ内で文字列のキーを指定する場合は、ダブルクォーテーションで囲む必要がある点に注意。
この手法を使いこなせば、深くネストされたドキュメント構造からも必要なデータを効率的に取り出せるようになります。
-
MongoDBでドキュメントとサブドキュメントを表示・更新する方法(実例付き)
MongoDBでは、ドキュメントの中にサブドキュメント(ネストされた配列やオブジェクト)を持たせることができます。この記事では、ドキュメントとサブドキュメントを含むコレクションの作成、find()メソッドによる表示、update()メソッドによる更新までを具体例とともに解説します。ドキュメントとサブドキュメントの基本構文ドキュメントとサブドキュメントを挿入する際の基本的な構文は以下のとおりです。db.yourCollectionName.insertOne( {
-
MongoDB 4でドキュメントをソートし、特定の1つのフィールドだけを表示する方法
MongoDB 4でドキュメントを並べ替えるには、sort()メソッドを使用します。さらに、ソートした特定の1つのフィールドのみを表示したい場合は、プロジェクション(射影)を組み合わせて、表示したいフィールドに「1」を設定します。この記事では、実際のコード例を使って手順を順番に解説していきます。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、テスト用のコレクション「demo611」にドキュメントを登録します。> db.demo611.insertOne({Name:Chris}); { acknowledged : true, insertedI