$match pipes the documents that match its conditions to the next operator in the pipeline.
The $match query syntax is identical to the read operation query syntax.
Example
The following operation uses $match to perform a simple equality match:
db.articles.aggregate(
{ $match : { author : "dave" } }
);
The $match selects the documents where the author field equals dave, and the aggregation returns the following:
{ "result" : [
{
"_id" : ObjectId("512bc95fe835e68f199c8686"),
"author": "dave",
"score" : 80
},
{ "_id" : ObjectId("512bc962e835e68f199c8687"),
"author" : "dave",
"score" : 85
}
],
"ok" : 1 }
Example
The following example selects documents to process using the $match pipeline operator and then pipes the results to the $group pipeline operator to compute a count of the documents:
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
In the aggregation pipeline, $match selects the documents where the score is greater than 70 and less than or equal to 90. These documents are then piped to the $group to perform a count. The aggregation returns the following:
{
"result" : [
{
"_id" : null,
"count" : 3
}
],
"ok" : 1 }
Note
New in version 2.4: $match queries can support the geospatial $geoWithin operations.
Warning
You cannot use $where in $match queries as part of the aggregation pipeline.