Aggregation framework was introduced by MongoDB in version 2.2 (2.1 in development branch). It serves as an alternative to both the MapReduce framework and also querying the database directly.
Using the aggregation framework, we can perform group by operations in the server. Thus we can project only the fields that are needed in the result set. Using the $match and $project operators, we can reduce the amount of data passed through the pipeline, resulting in faster data processing.
Self-joins, that is, joining data within the same collection, can also be performed using the aggregation framework as we will see in our use case.
When comparing the aggregation framework to the queries available via the shell or various other drivers, there is a use case for both.
For selection and projection queries, it's almost always better to use simple queries as the complexity...