$match(集計)
項目一覧
定義
$match
指定されたクエリ述語に基づいてドキュメントをフィルタリングします。 一致したドキュメントは、次のパイプライン ステージに渡されます。
互換性
次の環境でホストされる配置には $match
を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
{ $match: { <query predicate> } }
動作
パイプラインの最適化
$match
を集計パイプラインのできるだけ早く配置します。$match
は集計パイプライン内のドキュメントの合計数を制限するため、以前の$match
操作はパイプを下降する処理量を最小限に抑えます。パイプラインの先頭に
$match
を配置すると、クエリは他のdb.collection.find()
やdb.collection.findOne()
と同様に インデックスを利用できます。
クエリ述語の式
0 、NULL、false、または欠損値
次のいずれかの条件に当てはまる場合、$match
ステージはパイプラインの結果からドキュメントをフィルタリングで除外します。
$match
クエリ述語は、そのドキュメントの0
、null
、またはfalse
の値を返します。$match
クエリ述語は、そのドキュメントには欠落しているフィールドを使用します 。
制限事項
$match
ステージでは$where
は使用できません。$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 }
詳細情報
集計に関する詳細とユースケースについては、以下のページを参照してください。