Skip to main content

πŸ‘ $match

The $match operator is used in conjunction with the aggregation framework to filter documents in a collection. It takes a document as input and returns a new document containing only the documents that match the specified criteria. The syntax for the $match operator is as follows:

{ $match: { <expression>: <value> } }

Expressions​

The <expression> portion of the $match operator can be any valid MongoDB expression. This includes :

  • Comparison operators: eq, neq, gte, lte, gt, lt, in, nin, exists
  • Regular expressions: regex
  • Logical operators: and, or, not
  • Subdocuments and arrays: { field: <value> }, [ <item>, <item>, ... ]

Matching book documents​

First, make sure you select the books collection in the Atlas UI.

Atlas UI database deployment with the books collection highlighted.

Then, navigate to the Aggregation tab and click Add Stage.

Atlas UI database deployment with aggregation tab highlighted.

Say we want all the books from the year 2010. We can add a $match stage to filter the documents from the books collection:

[
{
$match: { year: 2010 }
}
]
Atlas AI $match aggregation.

πŸ‘ Return all the books that have exactly 100 pages.

Answer
[
{
$match: { pages: 100 }
}
]

AND​

If we need to add more conditions using AND, we can do it with the $and operator.

If we want all the books with 100 pages with exactly totalInventory 2 we can use an $and operator. This takes and array of documents with all the conditions that should be true for the AND to succeed:

[
{
$match: {
$and: [
{ pages: 100 },
{ totalInventory: 2 }
]
}
}
]

The pseudo-code for this would be something like:

IF pages == 100 AND totalInventory == 2 {
return matching docs
}

πŸ‘ Return all the books from 2015 that have exactly 100 pages.

Answer
[
{
$match: {
$and: [
{ pages: 100 },
{ year: 2015 }
]
}
}
]

πŸ‘ How many are they?

Answer
[
{
$match: {
$and: [
{ pages: 100 },
{ year: 2015 }
]
}
},
{
$count: "books_count"
}
]

Shorthand AND​

We can do an implicit AND just passing a document with all the conditions (instead of an array of documents):

[
{
$match: {pages: 100, totalInventory: 2}
}
]

πŸ‘ Return all the books from 2015 that have exactly 100 pages, using the simple $and notation

Answer
[
{
$match: {pages: 100, year: 2015}
}
]