$match(集計)
項目一覧
定義
互換性
次の環境でホストされる配置には $match
を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$match
ステージのプロトタイプ形式は次のとおりです。
{ $match: { <query> } }
$match
はクエリ条件を指定するドキュメントを受け取ります。 クエリ構文は読み取り操作クエリの構文 と同じです。つまり、 $match
は未加工の 集計式を受け入れていません。 代わりに、 $expr
クエリ式を使用して、 $match
に集計式を含めます。
動作
パイプラインの最適化
$match
を集計パイプラインのできるだけ早く配置します。$match
は集計パイプライン内のドキュメントの合計数を制限するため、以前の$match
操作はパイプを下降する処理量を最小限に抑えます。パイプラインの先頭に
$match
を配置すると、クエリは他のdb.collection.find()
やdb.collection.findOne()
と同様に インデックスを利用できます。
クエリ述語の式
0 、NULL、false、または欠損値
次のいずれかの条件に当てはまる場合、$match
ステージはパイプラインの結果からドキュメントをフィルタリングで除外します。
$match
クエリ述語は、そのドキュメントの0
、null
、またはfalse
の値を返します。$match
クエリ述語は、そのドキュメントには欠落しているフィールドを使用します 。
制限事項
$match
クエリ構文は読み取り操作クエリの構文と同じです。つまり、$match
は未加工の 集計式を受け入れていません。 集計式を$match
に含めるには、$expr
クエリ式を使用します。{ $match: { $expr: { <aggregation expression> } } } 集計パイプラインの一部として、
$match
クエリで$near
または$nearSphere
を使用することはできません。あるいは、次のいずれかを実行できます。$match
ステージで$center
または$centerSphere
とともに$geoWithin
クエリ演算子を使用する。
$text
$match
ステージで を使用するには、$match
ステージがパイプラインの最初のステージである必要があります。ビューは
$text
をサポートしていません。注意
$text
は、自己管理型(Atlas 以外)配置に対するテキスト クエリ機能を提供します。MongoDB Atlas でホストされているデータに対して、MongoDB は改良された全文クエリ ソリューションである Atlas Search を提供します。
Atlas Search を使用した Atlas のデータのフィルタリング
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
は、score
が 70
より大きく 90
より小さいか、views
が 1000
以上のドキュメントを選択します。これらのドキュメントは、カウントを実行するために$group
につなげられます。集計により次の結果が返されます。
{ "_id" : null, "count" : 5 }