Regular Expression (正規表現)
最終更新:2026-10-09
Regular Expression (正規表現)
Regular Expression はクエリのパターンマッチング用の BSON 型で、`{ field: /pattern/ }` と同等です。PCRE 構文とフラグ(i 大文字小文字無視、m 複数行、s ドットオール、x 拡張)をサポートします。アンカーなしのパターンはインデックスを使えずコレクションスキャンを強制するため、大規模コレクションでは注意して使ってください。
| カテゴリ | BSON 型 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ field: /^prefix/ }
{ field: /pattern/i }
new RegExp("pattern", "i")
戻り値:正規表現値そのもの。クエリでは一致するドキュメントを返します
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// Regular Expression: パターンクエリ
use shop
db.users.find({ name: /^alice/i })
db.products.find({ sku: { $regex: 'AB-\\d{4}' } })
出力:
// 名前が alice で始まるユーザー(大文字小文字無視)と、sku が AB-1234 のような商品を返す
📌 注意事項
- アンカー付きパターン(/^.../)のみインデックスを使える
- /pattern/ リテラルと $regex 文字列は同等
- 文字列内のバックスラッシュは2倍にする(\\d)
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q正規表現クエリはインデックスを使えますか?
A/^abc/ のようなアンカー付きパターンのみインデックスを使えます。他はコレクションをスキャンします。
Q$regex は /pattern/ と同じですか?
Aはい。どちらも正規表現クエリを構築します。$regex は文字列を受け取るだけです。
Q正規表現クエリが遅いのですが、どうすれば?
Aインデックス付きのアンカー付きプレフィックス一致に切り替えるか、全文検索に text インデックスを使います。