MongoDBのfind()メソッドでネストされた内部ドキュメントのフィールドを検索する方法
MongoDBのfind()でネストされた内部ドキュメント(サブドキュメント)を検索する方法
MongoDBでドキュメント内にネストされた内部ドキュメント(サブドキュメント)を検索するには、ドット記法(.)を使用します。本記事では、実際にコレクションを作成しながら、find()メソッドを使った内部フィールドの検索手順を具体的に解説します。
サンプルデータの作成
まず、ネストされた構造を持つドキュメントを含むコレクション「searchInInnerDemo」に、2件のドキュメントを挿入します。各ドキュメントは「StudentTechnicalDetails」という内部ドキュメントを持っています。
> db.searchInInnerDemo.insertOne(
... {
... "StudentFirstName" : "Robert",
... "StudentTechnicalDetails":
... {
... "StudentBackEndTechnology" : "MongoDB",
... "StudentLanguage" : "Java"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2dd89b64f4b851c3a13d2")
}
>
> db.searchInInnerDemo.insertOne(
... {
... "StudentFirstName" : "David",
... "StudentTechnicalDetails":
... {
... "StudentBackEndTechnology" : "MySQL",
... "StudentLanguage" : "PHP"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2dda3b64f4b851c3a13d3")
}
登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.searchInInnerDemo.find().pretty();
実行結果は以下のとおりです。
{
"_id" : ObjectId("5cd2dd89b64f4b851c3a13d2"),
"StudentFirstName" : "Robert",
"StudentTechnicalDetails" : {
"StudentBackEndTechnology" : "MongoDB",
"StudentLanguage" : "Java"
}
}
{
"_id" : ObjectId("5cd2dda3b64f4b851c3a13d3"),
"StudentFirstName" : "David",
"StudentTechnicalDetails" : {
"StudentBackEndTechnology" : "MySQL",
"StudentLanguage" : "PHP"
}
}ケース1:ドット記法で特定のフィールドだけを検索する
ドット記法を使うと、内部ドキュメントの中から特定のプロパティのみを条件に検索できます。次の例では、「StudentTechnicalDetails.StudentBackEndTechnology」が「MongoDB」であるドキュメントを取得しています。
>db.searchInInnerDemo.find({"StudentTechnicalDetails.StudentBackEndTechnology":"MongoDB"}).pretty();実行結果:
{
"_id" : ObjectId("5cd2dd89b64f4b851c3a13d2"),
"StudentFirstName" : "Robert",
"StudentTechnicalDetails" : {
"StudentBackEndTechnology" : "MongoDB",
"StudentLanguage" : "Java"
}
}ケース2:内部ドキュメント全体を完全一致で検索する
ドット記法を使わず、内部ドキュメント全体をそのまま指定して検索することも可能です。この場合、フィールド名と値がすべて完全に一致したドキュメントのみがヒットします。
>db.searchInInnerDemo.find({"StudentTechnicalDetails":{"StudentBackEndTechnology":"MongoDB","StudentLanguage":"Java"}}).pretty();実行結果:
{
"_id" : ObjectId("5cd2dd89b64f4b851c3a13d2"),
"StudentFirstName" : "Robert",
"StudentTechnicalDetails" : {
"StudentBackEndTechnology" : "MongoDB",
"StudentLanguage" : "Java"
}
}まとめ
ネストされたフィールドを部分的に条件として検索したい場合はドット記法が便利です。一方、内部ドキュメント全体を完全一致で検索したい場合は、オブジェクト単位で指定する必要があります。目的に応じて両者を使い分けることで、より柔軟なデータ取得が可能になります。
-
MongoDBのサブドキュメントを検索する方法:ドット表記を使ったクエリ実行手順を解説
MongoDBでは、ネストされたサブドキュメント(埋め込みドキュメント)を検索する際に、ドット表記(dot notation)を使用します。フィールド名とサブフィールド名をドット(.)でつなぐことで、階層構造を持つデータにも簡単にアクセスできます。この記事では、実際にコレクションを作成し、サブドキュメントに対してクエリを実行するまでの手順をサンプルコード付きで解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サブドキュメントを含むドキュメントをコレクションに挿入します。> db.demo537.insertOne({details:{S
-
MongoDBでドキュメントのフィールドにアクセスする方法|find()とプロジェクションの使い方
MongoDBでドキュメント内のフィールドにアクセスするには、find()メソッドを使用します。この記事では、実際にコレクションを作成し、ドキュメントを挿入したうえで、特定のフィールドだけを取得する方法をサンプルコード付きで解説します。 コレクションの作成とドキュメントの挿入 まず、サンプル用のコレクション「demo565」を作成し、3件のドキュメントを挿入します。insertOne()メソッドを使って、1件ずつ登録していきましょう。 > db.demo565.insertOne( ... { ... id:101, ... Name:David, ... Countr