MongoDBのテキスト検索で正規表現($regex)を使う方法
MongoDBで正規表現を使ってドキュメントを絞り込みたい場合は、$regex 演算子を使用します。$regex を使うことで、特定のパターンに一致する文字列を持つドキュメントを柔軟に検索できます。この記事では、実際のコード例を通して、コレクションの作成から正規表現による検索までの手順をわかりやすく解説します。
1. ドキュメントを含むコレクションを作成する
まず、insertOne() メソッドを使ってサンプルデータを持つコレクションを作成します。
> db.demo19.insertOne({"Values":"4321GH"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389b955d0fc6657d21f0f")
}
> db.demo19.insertOne({"Values":"12321_Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389c755d0fc6657d21f10")
}
> db.demo19.insertOne({"Values":"8765Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1389d355d0fc6657d21f11")
}これで、「4321GH」「12321_Carol」「8765Mike」という3つの値を持つドキュメントが登録されました。
2. find()メソッドですべてのドキュメントを表示する
登録した内容を確認するため、find() メソッドですべてのドキュメントを表示してみましょう。
> db.demo19.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e1389b955d0fc6657d21f0f"), "Values" : "4321GH" }
{ "_id" : ObjectId("5e1389c755d0fc6657d21f10"), "Values" : "12321_Carol" }
{ "_id" : ObjectId("5e1389d355d0fc6657d21f11"), "Values" : "8765Mike" }3. $regexを使った正規表現検索
続いて、本題である $regex を使ったテキスト検索のクエリを見ていきましょう。次の例では、「4321」または「8765」を含むドキュメントを検索しています。
> db.demo19.find({Values: {$regex: /4321|8765/, $options: 'i'}});クエリのポイント
- /4321|8765/:パイプ(|)はOR条件を意味し、「4321」または「8765」のいずれかに一致する文字列を検索します。
- $options: 'i':大文字と小文字を区別せずに検索するオプションです。英字を扱う場合に便利です。
このクエリを実行すると、条件に一致した次の2件のドキュメントのみが出力されます。
{ "_id" : ObjectId("5e1389b955d0fc6657d21f0f"), "Values" : "4321GH" }
{ "_id" : ObjectId("5e1389d355d0fc6657d21f11"), "Values" : "8765Mike" }まとめ
MongoDBでは、$regex 演算子と $options を組み合わせることで、部分一致やOR条件、大文字小文字を無視した柔軟なテキスト検索が可能になります。ただし、正規表現検索はインデックスを活用できないケースがあるため、大量のデータを扱う場合はパフォーマンスへの影響にも注意しましょう。
-
SeekFastでファイル内のテキストを一括検索!特徴・使い方・料金を徹底解説
本記事はSeekFast提供のスポンサー記事です。記事の内容および意見は、スポンサーが付いた場合でも編集の独立性を保つ著者自身の見解によるものです。 はじめに:ファイル名検索とファイル内容検索の違い 現代のOSにおいて、「ファイルを見つける」という作業はすでに解決済みの課題といえます。探しているファイルの名前がおよそ分かっていれば、目的のファイルにたどり着くのは難しいことではありません。 しかし、ファイルの中身から特定のテキストを探し出すのは、今なお容易ではありません。コマンドラインを使えばプレーンテキストファイル内を検索できますが、それで問題全体が解決するわけではありません。たとえば
-
XPathで (空白)を含むテキストを検索する方法|normalize-space関数の使い方
XPathで や空白を含むテキストを検索する方法Web自動テストでは、 (ノーブレークスペース)や余分な空白を含むテキストを持つ要素を、XPathロケーターで特定したいケースがあります。まずは、前後に空白が含まれているWeb要素のHTMLコードを確認してみましょう。下の画像の例では、strongタグで囲まれた「JAVA BASICS」というテキストに空白が含まれていることが、HTMLコードから読み取れます。要素のテキストや属性値に空白が含まれている場合、そのような要素に対するXPathを作成するにはnormalize-space関数を使用します。この関数は、文字列から前後(