MongoDBのサブドキュメントを検索する方法:ドット表記を使ったクエリ実行手順を解説
MongoDBでは、ネストされたサブドキュメント(埋め込みドキュメント)を検索する際に、ドット表記(dot notation)を使用します。フィールド名とサブフィールド名をドット(.)でつなぐことで、階層構造を持つデータにも簡単にアクセスできます。
この記事では、実際にコレクションを作成し、サブドキュメントに対してクエリを実行するまでの手順をサンプルコード付きで解説します。
1. コレクションの作成とドキュメントの挿入
まず、insertOne()メソッドを使って、サブドキュメントを含むドキュメントをコレクションに挿入します。
> db.demo537.insertOne({"details":{"SubjectName":"MongoDB"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8c8a10ef4dcbee04fbbc05")
}
> db.demo537.insertOne({"details":{"SubjectName":"MySQL"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8c8a4bef4dcbee04fbbc06")
}
> db.demo537.insertOne({"details":{"SubjectName":"Java"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8c8a51ef4dcbee04fbbc07")
}上記のコードでは、「details」というフィールドの中に「SubjectName」というサブフィールドを持つドキュメントを3件作成しました。
2. find()メソッドですべてのドキュメントを確認する
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo537.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e8c8a10ef4dcbee04fbbc05"), "details" : { "SubjectName" : "MongoDB" } }
{ "_id" : ObjectId("5e8c8a4bef4dcbee04fbbc06"), "details" : { "SubjectName" : "MySQL" } }
{ "_id" : ObjectId("5e8c8a51ef4dcbee04fbbc07"), "details" : { "SubjectName" : "Java" } }3. ドット表記でサブドキュメントにクエリを実行する
サブドキュメント内のフィールドを指定して検索するには、「親フィールド名.子フィールド名」の形式でクエリ条件を記述します。ここでは、「details.SubjectName」が「MongoDB」であるドキュメントの件数をcount()で取得してみましょう。
> db.demo537.count({'details.SubjectName': 'MongoDB'})実行結果は以下のとおりです。
1
「SubjectName」が「MongoDB」のドキュメントは1件だけなので、結果として「1」が返されました。
補足:新しいバージョンでのカウント方法
MongoDB 4.0以降では、count()メソッドは非推奨となっており、代わりにcountDocuments()の使用が推奨されています。最新の環境では以下のように記述します。
> db.demo537.countDocuments({'details.SubjectName': 'MongoDB'})まとめ
MongoDBでサブドキュメントを検索するポイントは以下のとおりです。
- ドット表記(「details.SubjectName」など)を使ってネストされたフィールドにアクセスする
- ドット表記の前後にスペースを入れないよう注意する
- 件数の取得には、新しいバージョンではcountDocuments()を使うのが望ましい
ドット表記をマスターすれば、複雑な階層構造のドキュメントでも柔軟に検索できるようになります。
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb
-
MongoDBのfind()クエリでネストされたドキュメントを取得する方法
MongoDBでネストされたドキュメント(入れ子になったサブドキュメントや配列内のオブジェクト)から値を取得するには、「ドット表記(dot notation)」を使用します。この記事では、サンプルコレクションを作成し、find()クエリを使ってネストされたデータを検索する具体的な手順を解説します。 サンプルコレクションの作成 まず、insert()メソッドを使ってドキュメントを含むコレクションを作成しましょう。 > db.demo591.insert([ ... { "Name": "John", "Age": 23 },