AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

$match(集計ステージ)

$match

指定されたクエリ述語に基づいてドキュメントをフィルタリングします。 一致したドキュメントは、次のパイプライン ステージに渡されます。

次の環境でホストされる配置には $match を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

{ $match: { <query predicate> } }

クエリ述語の構文は、$match コマンドの クエリ find()引数で使用される構文と同じです。

クエリ述語に式を含めるには、 $expr演算子を使用します。

次のいずれかの条件に当てはまる場合、$match ステージはパイプラインの結果からドキュメントをフィルタリングで除外します。

  • $match クエリ述語は、そのドキュメントの 0 、 null 、または false の値を返します。

  • $matchクエリ述語は、そのドキュメントには欠落しているフィールドを使用します 。

  • $matchステージでは$whereは使用できません。

  • $matchステージでは$nearまたは$nearSphereは使用できません。 あるいは、次のいずれかを実行できます。

  • $text$matchステージで を使用するには、$match ステージがパイプラインの最初のステージである必要があります。

    ビューは$textをサポートしていません。

    注意

    $text は、自己管理型(Atlas 以外)配置に対するテキスト クエリ機能を提供します。MongoDB Atlas でホストされているデータに対して、MongoDB は改良された全文クエリ ソリューションである Atlas Search を提供します。

MongoDB Atlas に保存されているデータでは、Atlas Search複合演算子filterオプションを使用して、$search クエリを実行中にドキュメントを一致させるか、フィルタリングできます。$matchを$search の後に実行するのは、$search を複合演算子filterオプションとともに実行する場合よりもパフォーマンスが低くなります。

filter オプションの詳細については、Atlas ドキュメントの「複合演算子」を参照してください。

このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。

次の操作では、$match を使用して ratedフィールドで等価一致を実行します。runtime フィルターは、結果を小さく表現されたセットに制限します。

db.movies.aggregate( [ { $match : { rated : "TV-PG", runtime : { $gt: 1000 } } } ])

The $match selects the documents where the ratedフィールドが"TV-PG" に等しく、かつ runtime が 1000 より大きいdocumentを選択します。

次の例では、 $matchパイプライン演算子を使用して処理するドキュメントを選択し、その結果を$groupパイプライン演算子にパイプしてドキュメントの数を計算します。

db.movies.aggregate( [ { $match: { $or: [ { runtime: { $gt: 1000 } }, { year: { $lt: 1910 } } ] } }, { $group: { _id: null, count: { $sum: 1 } } }] )
[ { _id: null, count: 6 } ]

集計パイプラインで、$match は、runtime が 1000 より大きいか、year が 1910 より前のdocumentを選択します。これらのドキュメントは、カウントを実行するために $group に送信されます。

配列フィールド内の要素に基づいてdocumentをフィルタリングするには、$match ステージのクエリ述語で $elemMatch 演算子を使用します。

db.aggregate( [ { $documents: [ { student_id: 1, scores: [ 0.75, 0.65, 0.73 ] }, { student_id: 2, scores: [ 0.9, 0.88, 0.98 ] }, { student_id: 3, scores: [ 0.9, 0.84, 0.93 ] } ] }, { $match: { scores: { $elemMatch: { $gte: 0.9 } } } }] )
[ { student_id: 2, scores: [ 0.9, 0.88, 0.98 ] }, { student_id: 3, scores: [ 0.9, 0.84, 0.93 ] }]

集計に関する詳細情報とユースケースについては、完全な集計パイプラインチュートリアルを参照してください。