$match (ドキュメントのフィルター)

最終更新:2026-10-09

$match (ドキュメントのフィルター)

$match は、クエリ条件でドキュメントをフィルターし、一致したものだけを後続のステージに渡します。find() のクエリ述語に相当する集計版のフィルターです。$match はできるだけ先頭に置きましょう — インデックスを使える上、後続ステージに入るドキュメント数を減らせるため、集計パフォーマンスの第一の鉄則です。

カテゴリコアステージ
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $match: { <query> } }

⚙️ パラメータ

クエリ条件find() と同じクエリ式。比較・論理・要素演算子をサポートします。

戻り値:フィルタリングされたドキュメントストリーム(次のステージ用)

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $match: ステータスが A の注文だけに絞る
db.orders.aggregate([
  { $match: { status: "A" } },
  { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])

出力:

// 顧客ごとの合計を返す
{ "_id": "A123", "total": 250 }
{ "_id": "B456", "total": 130 }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$match と find() の違いは?
Aクエリ条件は同じですが、$match は集計パイプライン内で使い、結果を次のステージに渡します。
Q$match はパイプラインの途中に置けますか?
A置けますが、インデックスの最適化が失われます。可能な限り先頭に置くのが定石です。
Qなぜ $match をパイプラインの先頭に置くのですか?
A早い段階で絞り込むと後続ステージに渡るデータ量が減り、さらに $match がインデックスを使えるため、パフォーマンスが大幅に向上します。後ろに置いても動作しますが、インデックスは使えません。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%