Can all stages use expressions?
There are many types of stages in the aggregation framework that don't allow expressions to be embedded. Here are some examples of some of the most popular of these stages:
$
match
$
limit
$
skip
$
sort
$
count
$
lookup
$
out
Some of these stages may be a surprise to you if you've never really thought about it before. You might consider $match
to be the most surprising item in this list. The content of a $match
stage is just a set of query conditions with the same syntax as MongoDB Query Language rather than an aggregation expression. There is a good reason for this. The aggregation engine reuses the MongoDB Query Language query engine to perform a regular query against the collection, enabling the query engine to use all its usual optimizations. The query conditions are taken as-is from the $match
stage at the top of the pipeline. Therefore, the $match
filter must use the same syntax as MongoDB Query Language...