Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$match(集計)

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
  • パイプラインの最適化
  • クエリ述語の式
  • 0 、NULL、false、または欠損値
  • 制限事項
  • Atlas Search を使用した Atlas のデータのフィルタリング
  • 等価一致
  • カウントの実行
$match

指定された条件に一致するドキュメントのみを次のパイプライン ステージに渡すようにドキュメントをフィルタリングします。

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

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

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

$matchステージのプロトタイプ形式は次のとおりです。

{ $match: { <query> } }

$matchはクエリ条件を指定するドキュメントを受け取ります。 クエリ構文は読み取り操作クエリの構文 と同じです。つまり、 $matchは未加工の 集計式を受け入れていません。 代わりに、 $exprクエリ式を使用して、 $matchに集計式を含めます。

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

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

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

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

  • $matchクエリ構文は読み取り操作クエリの構文と同じです。つまり、 $matchは未加工の 集計式を受け入れていません。 集計式を$matchに含めるには、 $exprクエリ式を使用します。

    { $match: { $expr: { <aggregation expression> } } }
  • $where$match集計パイプラインの一部として クエリでは を使用することはできません。

  • 集計パイプラインの一部として、$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 ドキュメントの複合を参照してください。

例では、次のドキュメントを含む articles という名前のコレクションを使用します。

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b257"), "author" : "ahn", "score" : 60, "views" : 1000 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b258"), "author" : "li", "score" : 55, "views" : 5000 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b259"), "author" : "annT", "score" : 60, "views" : 50 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25a"), "author" : "li", "score" : 94, "views" : 999 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25b"), "author" : "ty", "score" : 95, "views" : 1000 }

次の操作では、 $matchを使用して単純な等価一致を実行します。

db.articles.aggregate(
[ { $match : { author : "dave" } } ]
);

$matchは、 authorフィールドがdaveと等しいドキュメントを選択し、集計は次の結果を返します。

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }

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

db.articles.aggregate( [
{ $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );

集計パイプラインで、$match は、score70 より大きく 90 より小さいか、views1000以上のドキュメントを選択します。これらのドキュメントは、カウントを実行するために$groupにつなげられます。集計により次の結果が返されます。

{ "_id" : null, "count" : 5 }

Tip

以下も参照してください。

戻る

$lookup