MongoDBの二重ネスト配列(Double Nested Array)からテキストを検索する方法
MongoDBで二重にネストされた配列(ダブルネスト配列)の中から特定のテキストを検索するには、ドット(.)表記を利用します。この記事では、コレクションの作成からfind()メソッドによるドキュメントの確認、そして二重ネスト配列への検索クエリの実行まで、具体的なコード例とともに手順を解説します。
手順1:サンプルコレクションの作成
まず、検索対象となるコレクションを作成します。次のクエリでは、学生情報を格納する「doubleNestedArrayDemo」コレクションに2件のドキュメントを挿入しています。各ドキュメントは「StudentDetails」配列の中に「ProjectDetails」配列が入れ子になった二重ネスト構造を持っているのが特徴です。
> db.doubleNestedArrayDemo.insertOne(
... {
... "StudentId" : "1000",
... "StudentName" : "Larry",
... "StudentDetails" : [
... {
... "ProjectName" : "Online Banking",
... "ProjectDetails" : [
... {
... "TechnologyUsed" : "Java"
... },
... {
... "TechnologyUsed" : "MySQL in Backend"
... }
... ]
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5c992bd7330fd0aa0d2fe4cc")
}
> db.doubleNestedArrayDemo.insertOne( { "StudentId" : "1001", "StudentName" : "Robert", "StudentDetails" : [ { "ProjectName" : "Student Web Tracker", "ProjectDetails" : [ { "TechnologyUsed" : "Django Framework" }, { "TechnologyUsed" : "MongoDB in Backend" } ] } ] } );
{
"acknowledged" : true,
"insertedId" : ObjectId("5c992cdb330fd0aa0d2fe4cd")
}
insertOne()メソッドでドキュメントが正常に挿入されると、「acknowledged : true」という結果とともに、自動的に割り当てられたObjectIdが返されます。
手順2:登録済みドキュメントの確認
続いて、find()メソッドを使ってコレクション内のすべてのドキュメントを表示します。pretty()メソッドを組み合わせると、インデントされた読みやすい形式で結果が出力されます。
> db.doubleNestedArrayDemo.find().pretty()
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5c992bd7330fd0aa0d2fe4cc"),
"StudentId" : "1000",
"StudentName" : "Larry",
"StudentDetails" : [
{
"ProjectName" : "Online Banking",
"ProjectDetails" : [
{
"TechnologyUsed" : "Java"
},
{
"TechnologyUsed" : "MySQL in Backend"
}
]
}
]
}
{
"_id" : ObjectId("5c992cdb330fd0aa0d2fe4cd"),
"StudentId" : "1001",
"StudentName" : "Robert",
"StudentDetails" : [
{
"ProjectName" : "Student Web Tracker",
"ProjectDetails" : [
{
"TechnologyUsed" : "Django Framework"
},
{
"TechnologyUsed" : "MongoDB in Backend"
}
]
}
]
}
手順3:二重ネスト配列内のテキストを検索する
それでは本題である、二重にネストされた配列内のテキスト検索を行いましょう。検索条件には「StudentDetails.ProjectDetails.TechnologyUsed」のように、親フィールドから子フィールドまでをドットでつないだパスを指定します。ここでは「Java」というテキストを含むレコードを検索してみます。
>db.doubleNestedArrayDemo.find({"StudentDetails.ProjectDetails.TechnologyUsed":"Java"}).pretty();
クエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5c992bd7330fd0aa0d2fe4cc"),
"StudentId" : "1000",
"StudentName" : "Larry",
"StudentDetails" : [
{
"ProjectName" : "Online Banking",
"ProjectDetails" : [
{
"TechnologyUsed" : "Java"
},
{
"TechnologyUsed" : "MySQL in Backend"
}
]
}
]
}
ポイント解説
注目すべきは、検索条件に配列のインデックス(要素番号)を指定していない点です。MongoDBでは、ドット表記でネストされた配列フィールドへのパスを指定するだけで、配列内のすべての要素が自動的に走査され、条件に一致するドキュメントのみが返されます。そのため、今回の例では「TechnologyUsed」が「Java」であるLarryさんのドキュメントだけが出力されました。この手法を活用すれば、何重にネストされたドキュメント構造でも、目的のテキストを柔軟かつ正確に検索することができます。
-
Windows 10でファイルの中身(テキスト内容)を検索する方法【ファイル名以外もOK】
パソコンには、ファイル・画像・動画・ドキュメントなど、あらゆるデータが保存されています。スマートフォンやUSBメモリ、インターネットから入手したデータもPCに取り込まれ、保存場所ごとにさまざまなフォルダへ整理されています。 特定のファイルやアプリを探したいとき、一つひとつフォルダを開いて探していては膨大な時間がかかってしまいます。そこで役立つのがWindows 10の検索機能です。検索ボックスに入力するだけで、目的のファイルやアプリをすぐに見つけられます。 さらにWindows 10では、ファイル名だけでなくファイルの中身(テキスト内容)からも検索できます。ただし、この機能は初期状態では無効に
-
複数のPDFファイルからテキストを一括検索する5つの方法【Windows対応】
PDFファイルは、文書共有に最適なフォーマットとして、多くの企業や組織で広く利用されています。その理由は、PDFファイルがロックされており、他の人が内容を編集・変更できないためです。Word文書では誰でも変更を加えられてしまうのに対し、PDFなら誤って内容が書き換えられたり、意図しない破損が起こったりする心配がありません。そのため、報告書や年次報告書、学術研究資料、ユーザーマニュアルなどには、PDF形式を使うのが標準的な慣習となっています。しかし、複数のPDFファイルを同時に扱っていて、その中から特定のトピックを探したい場合はどうすればよいのでしょうか?1つずつPDFを開いて検索していくのは、