$regex (正規表現)
最終更新:2026-10-09
$regex (正規表現)
$regex は、文字列フィールドを正規表現でマッチします。`{ name: { $regex: '^A' } }` は A で始まる名前に一致します。オプション: i = 大文字小文字を区別しない、m = 複数行、x = 空白を無視。インデックスがない場合、$regex クエリはコレクション全体をスキャンします。通常のインデックスを使えるのは、大文字小文字を区別する先頭アンカー(^)のパターンだけです。
| カテゴリ | 要素と評価 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $regex: <pattern>, $options: '<options>' } }
⚙️ パラメータ
| フィールド | マッチ対象のドキュメントフィールド。 |
|---|---|
| 正規表現 | PCRE 形式の正規表現パターン。 |
| オプション | 任意: i=大文字小文字を区別しない、m=複数行、x=空白を無視、など。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $regex: A で始まる名前(大文字小文字を区別)
db.users.find({ name: { $regex: '^A' } })
// 大文字小文字を区別しない: mongodb を含むタイトル
db.articles.find({ title: { $regex: 'mongodb', $options: 'i' } })
出力:
// A で始まる名前と、mongodb をどこかに含むタイトル(大文字小文字を区別しない)を返す
📌 注意事項
- 通常のインデックスを使えるのは、大文字小文字を区別する先頭アンカー(^)のパターンのみ
- 特殊文字はエスケープする。例: \. はリテラルのドットに一致
- $options は分けて指定する: { $regex: '...', $options: 'i' }
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$regex を大文字小文字を区別しないようにするには?
A$options: 'i' を追加します。例: { name: { $regex: 'alice', $options: 'i' } }。
Q$regex はインデックスを使えますか?
A先頭アンカーで大文字小文字を区別するパターン(例: ^A)だけが通常のインデックスを使えます。それ以外はコレクションスキャンになります。
Q全文検索には $regex と $text のどちらを使うべきですか?
A大規模なテキストには $text(インデックス使用・ステミング対応)を使います。$regex は小規模データや正確なパターンに適しています。