MongoDBでサブフィールド(ネストされたフィールド)を検索する方法
MongoDBでサブフィールドを検索するには
MongoDBでは、ドキュメント内にネストされたオブジェクト(サブドキュメント)のフィールドを検索したい場合、ダブルクォート(")で囲んだドット記法を使用します。これにより、「親フィールド.子フィールド」という形式でサブフィールドを指定してクエリを実行できます。
ここでは、実際にコレクションを作成し、サブフィールドを検索する手順を順番に見ていきましょう。
1. ドキュメントを含むコレクションを作成する
まず、insertOne()メソッドを使って「UserDetails」というネストされたオブジェクトを持つドキュメントをコレクションに挿入します。
> db.searchSubFieldDemo.insertOne(
... {
... "UserDetails":
... {"UserEmailId":"John123@gmail.com","UserAge":21}
... }
... );
{
&n"acknowledged" : true,
&n"insertedId" : ObjectId("5cd3d909edc6604c74817ce2")
}
> db.searchSubFieldDemo.insertOne( { "UserDetails": {"UserEmailId":"Carol@yahoo.com","UserAge":26} } );
{
&n"acknowledged" : true,
&n"insertedId" : ObjectId("5cd3d9a4edc6604c74817ce3")
}2. find()メソッドですべてのドキュメントを表示する
次に、find()メソッドを使ってコレクション内のすべてのドキュメントを表示してみます。
> db.searchSubFieldDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{
&n"_id" : ObjectId("5cd3d909edc6604c74817ce2"),
&n"UserDetails" : {
&n "UserEmailId" : "John123@gmail.com",
&n "UserAge" : 21
&n}
}
{
&n"_id" : ObjectId("5cd3d9a4edc6604c74817ce3"),
&n"UserDetails" : {
&n "UserEmailId" : "Carol@yahoo.com",
&n "UserAge" : 26
&n}
}3. サブフィールドを検索するクエリを実行する
いよいよ、サブフィールドを検索します。ポイントは、検索条件のキーをダブルクォートで囲み、親フィールドと子フィールドをドット(.)でつなぐことです。
> db.searchSubFieldDemo.find({"UserDetails.UserEmailId":"Carol@yahoo.com"});このクエリでは、「UserDetails」オブジェクト内の「UserEmailId」が「Carol@yahoo.com」と一致するドキュメントだけを取得しています。実行結果は以下の通りです。
{ "_id" : ObjectId("5cd3d9a4edc6604c74817ce3"), "UserDetails" : { "UserEmailId" : "Carol@yahoo.com", "UserAge" : 26 } }まとめ
MongoDBでネストされたサブフィールドを検索する場合は、{"親フィールド.子フィールド": 値}のように、ドット記法のキー全体をダブルクォートで囲むのが基本です。この記法を覚えておけば、階層構造を持つドキュメントからも目的のデータを簡単かつ正確に取り出せるようになります。
-
MongoDBで全文検索を実行する方法 – $text演算子の使い方
MongoDBで全文検索(フルテキスト検索)を実行するには、$text 演算子を使用します。$text は、テキストインデックスが設定されたフィールドの内容に対してテキスト検索を行うための機能です。本記事では、実際のコマンド例とともに、インデックス作成から検索実行までの手順を解説します。 1. テキストインデックスの作成 まず、createIndex() メソッドを使って、検索対象となるフィールドにテキストインデックスを作成します。以下の例では、demo654 コレクションの Name フィールドに対してテキストインデックスを設定しています。 > db.demo654.createI
-
MongoDBで大文字と小文字を区別せずに検索する方法($regexの使い方)
MongoDBで大文字と小文字を区別しない(ケースインセンシティブな)検索を実行したい場合は、find()メソッドの中で正規表現($regex)を使用します。基本となる構文は以下の通りです。db.demo572.find({yourFieldName : { $regex : /^yourValue$/i}});正規表現のポイントこの構文で重要なのは、パターンの末尾に付ける「i」オプションです。このフラグを指定することで、マッチング時に大文字と小文字の違いが無視されます。また、^(先頭)と$(末尾)で値を囲むことで、部分一致ではなく完全一致の検索になります。それでは、実際にサンプルコレクション