$regexFind (最初の正規表現マッチ)
最終更新:2026-10-09
$regexFind (最初の正規表現マッチ)
$regexFind は Perl 互換の正規表現で文字列を検索し、最初のマッチをドキュメント(match・idx・captures フィールドを持つ)として返します。マッチしなければ null です。regex にはパターン文字列をそのまま渡し、options で i(大文字小文字を無視)や m(複数行)などのフラグを指定できます。$regexMatch と違いキャプチャグループも返すため、抽出や部分文字列の取り出しに適しています。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $regexFind: { input: <string-expression>, regex: <pattern>, options: <options> } }
⚙️ パラメータ
| input | 必須。検索対象の文字列。 |
|---|---|
| regex | 必須。Perl 互換の正規表現パターン文字列。 |
| options | 任意のフラグ(i、m、x など)。 |
戻り値:マッチドキュメント { match, idx, captures }。マッチしない場合、または入力が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $regexFind: 連絡先から 11 桁の電話番号を抽出
db.users.aggregate([
{ $project: { phone: { $regexFind: { input: '$contact', regex: '[0-9]{11}', options: 'i' } } } }
])
出力:
{ "_id": 1, "phone": { "match": "13800138000", "idx": 5, "captures": [] } }
{ "_id": 2, "phone": null }
📌 注意事項
- マッチしない場合は null を返す(空ドキュメントではない)
- captures はキャプチャグループを保持。なければ空
- options は i(大文字小文字無視)・m(複数行)・x(空白無視)をサポート
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qnull はマッチなしを意味しますか?
Aはい — マッチしないと null になります。$ifNull で保護してください。
Qキャプチャグループを取得するには?
Acaptures フィールドにグループの内容が順に並びます。
Qoptions でフラグを組み合わせられますか?
Aはい — 例: 'im' で大文字小文字無視と複数行の両方が有効になります。