$regexFindAll (すべての正規表現マッチ)
最終更新:2026-10-09
$regexFindAll (すべての正規表現マッチ)
$regexFindAll は正規表現で文字列を検索し、すべてのマッチを配列で返します。各要素は match・idx・captures フィールドを持ち、マッチがなければ空配列になります。メールアドレスやリンク、数字などの繰り返しパターンの抽出に最適です。$regexFind と違い null を返すことはなく、常に配列を返すため、$size でマッチ数を直接数えられます。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $regexFindAll: { input: <string-expression>, regex: <pattern>, options: <options> } }
⚙️ パラメータ
| input | 必須。検索対象の文字列。 |
|---|---|
| regex | 必須。Perl 互換の正規表現パターン文字列。 |
| options | 任意のフラグ(i、m など)。 |
戻り値:マッチドキュメントの配列。何もマッチしない場合は空、入力が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $regexFindAll: 投稿からすべてのリンクを抽出
db.posts.aggregate([
{ $project: { links: { $regexFindAll: { input: '$body', regex: 'https?://[a-z0-9.]+' } } } }
])
出力:
{ "_id": 1, "links": [ { "match": "https://a.com", "idx": 10, "captures": [] }, { "match": "https://b.org", "idx": 32, "captures": [] } ] }
📌 注意事項
- マッチなしは null ではなく空配列 — $size がそのまま使える
- グローバルにマッチし、最初のヒットで止まらない
- 大きなテキストでは性能に注意。必要なら $regexMatch で事前フィルタする
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qマッチしない場合は何が返りますか?
Anull ではなく空配列です。
Qマッチ数を数えるには?
A結果を $size で包みます。
Q$regexFind との違いは?
A$regexFind は最初のマッチ(なければ null)、$regexFindAll はすべてのマッチを返します。