単語(正規表現)を使ってMongoDBドキュメントを検索する方法
はじめに
MongoDBで特定の単語を含むドキュメントを検索したい場合、find()メソッドと正規表現を組み合わせることで実現できます。例えば、名前フィールドに「doe」という単語が含まれるすべてのドキュメントを取得するには、検索パターンとして /doe/i のように指定します。
ここで使われている /i は「大文字・小文字を区別しない(case-insensitive)」ことを意味するオプションです。そのため、「John Doe」や「Robert doe」のように大文字小文字が異なる場合でも、両方ともヒットします。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使って、複数のドキュメントを挿入します。
> db.demo212.insertOne({"details":[{"Name":"John Doe"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e2c7603d395bdc21346ff")
}
> db.demo212.insertOne({"details":[{"Name":"Chris Brown"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e2c8003d395bdc2134700")
}
> db.demo212.insertOne({"details":[{"Name":"Robert doe"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e2c8a03d395bdc2134701")
}登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo212.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3e2c7603d395bdc21346ff"), "details" : [ { "Name" : "John Doe" } ] }
{ "_id" : ObjectId("5e3e2c8003d395bdc2134700"), "details" : [ { "Name" : "Chris Brown" } ] }
{ "_id" : ObjectId("5e3e2c8a03d395bdc2134701"), "details" : [ { "Name" : "Robert doe" } ] }単語でドキュメントを検索するクエリ
それでは、特定の単語(この例では「doe」)を含むドキュメントを検索してみましょう。ネストされた配列内のフィールドを指定するには、ドット記法で "details.Name" のように記述し、値に正規表現を渡します。
> db.demo212.find({"details.Name":/doe/i});このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3e2c7603d395bdc21346ff"), "details" : [ { "Name" : "John Doe" } ] }
{ "_id" : ObjectId("5e3e2c8a03d395bdc2134701"), "details" : [ { "Name" : "Robert doe" } ] }結果の解説
出力を見ると、「Chris Brown」は除外され、「John Doe」と「Robert doe」の2件のみが返されていることがわかります。これは、正規表現 /doe/i が名前に「doe」という文字列を含むドキュメントだけにマッチしたためです。大文字小文字を無視するオプションのおかげで、「Doe」と「doe」のどちらも一致対象になっています。
応用ポイント
- 前方一致で検索したい場合は
/^doe/i、後方一致なら/doe$/iを使用します。 - 完全一致させたい場合は、正規表現ではなく通常の文字列
{"details.Name": "John Doe"}を指定します。 - 大量のコレクションに対して部分一致検索を行うとインデックスが効かない場合があるため、パフォーマンスが必要な場面ではテキストインデックス(text index)やAtlas Searchの利用も検討しましょう。
まとめ
MongoDBで単語からドキュメントを検索するには、find()メソッドに正規表現パターンを渡すのが最もシンプルな方法です。/i フラグを使えば大文字小文字を気にせず柔軟な検索が可能になります。ぜひ実際のプロジェクトでも活用してみてください。
-
MongoDBでネストされたドキュメントを更新する方法|位置演算子$を使った配列要素の更新手順
MongoDBでは、ドキュメント内の配列に格納されたネストされた(入れ子の)ドキュメントも、位置演算子「$」を使うことで効率的に更新できます。この記事では、実際のコード例を通じて、配列内の特定のサブドキュメントを更新する手順をわかりやすく解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ネストされたドキュメントを含むコレクションを作成します。ここでは「Information」というフィールドに、複数のサブドキュメントを持つ配列を格納しています。 > db.demo595.insertOne( { Information: [ { _i
-
MongoDBで未使用のインデックスを検索する方法 ― $indexStats活用の6つのポイント
MongoDBはバージョン3.2以降、すべてのインデックスに対して使用状況の統計情報を追跡しています。これらの統計へアクセスするために、MongoDBは$indexStatsアグリゲーションパイプラインステージを提供しています。この記事では、MongoDBで未使用のインデックスを特定する際に押さえておきたい6つのポイントを解説します。例えば、次のコマンドを実行すると、コレクション「test.foo」のインデックス統計を取得できます。db.foo.aggregate( [ { $indexStats: { } } ] )参考: $indexStatsに関する公式ドキュメント$indexStats