w3resource

MongoDB Aggregation Stages Operator - $match

Description

The MongoDB $match operator filters the documents to pass only those documents that match the specified condition(s) to the next pipeline stage.

Syntax:

{ $match: { <query> } }

Points to remember:

  • It is very much effective if you place the $match as early as possible in the aggregation pipeline that limits the total number of documents in the aggregation pipeline.
  • When $match placed at the very beginning of a pipeline, the query can take advantage of indexes.
  • The $where can not be used in $match queries as part of the aggregation pipeline.

Sample collection empdetails

{
        "_id" : ObjectId("5541ffb465713ddc838b2dc7"),
        "emp_code" : "E005",
        "emp_name" : "Alan Hogg",
        "date_of_join" : "15/09/2013",
        "salary" : 9000,
        "deduction" : {
                "pf" : 2000,
                "pt" : 300,
                "it" : 200
        }
}
{
        "_id" : ObjectId("5542003c65713ddc838b2dc8"),
        "emp_code" : "E006",
        "emp_name" : "Karlos Mint",
        "date_of_join" : "23/05/2010",
        "salary" : 12000,
        "deduction" : {
                "pf" : 3000,
                "pt" : 300,
                "it" : 400
        }
}
{
        "_id" : ObjectId("554200a065713ddc838b2dc9"),
        "emp_code" : "E007",
        "emp_name" : "Burg Hence",
        "date_of_join" : "27/08/2011",
        "salary" : 10000,
        "deduction" : 4000
}

Example : $match - to Equality Match

The following command selects the documents where the salary field equals to 9000.

> db.empdetails.aggregate(
...     [ { $match : { salary : 9000 } } ]
... ).pretty();

Output :

{
        "_id" : ObjectId("5541ffb465713ddc838b2dc7"),
        "emp_code" : "E005",
        "emp_name" : "Alan Hogg",
        "date_of_join" : "15/09/2013",
        "salary" : 9000,
        "deduction" : {
                "pf" : 2000,
                "pt" : 300,
                "it" : 200
        }
}

Example : $match with $count

The following aggregation pipeline, $match selects the documents where the salary is greater than 9000 and less than or equal to 12000. Then sends the result for grouping with $group pipeline operator to perform a count.

db.empdetails.aggregate( [
                        { $match : { salary : { $gt : 9000, $lte : 12000 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

Outputp:

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

Previous: $project
Next: $redact



Follow us on Facebook and Twitter for latest update.