OPTIONS

Aggregation Pipeline Optimization

Changed in version 2.4.

Aggregation pipeline operations have an optimization phase which attempts to rearrange the pipeline for improved performance.

Pipeline Sequence Optimization

$sort + $skip + $limit Sequence Optimization

When you have a sequence with $sort followed by a $skip followed by a $limit, an optimization occurs that moves the $limit operator before the $skip operator. For example, if the pipeline consists of the following stages:

{ $sort: { age : -1 } },
{ $skip: 10 },
{ $limit: 5 }

During the optimization phase, the optimizer transforms the sequence to the following:

{ $sort: { age : -1 } },
{ $limit: 15 }
{ $skip: 10 }

Note

The $limit value has increased to the sum of the initial value and the $skip value.

The optimized sequence now has $sort immediately preceding the $limit. See $sort for information on the behavior of the $sort operation when it immediately precedes $limit.

$limit + $skip + $limit + $skip Sequence Optimization

When you have a continuous sequence of a $limit pipeline stage followed by a $skip pipeline stage, the optimization phase attempts to arrange the pipeline stages to combine the limits and skips. For example, if the pipeline consists of the following stages:

{ $limit: 100 },
{ $skip: 5 },
{ $limit: 10},
{ $skip: 2 }

During the intermediate step, the optimizer reverses the position of the $skip followed by a $limit to $limit followed by the $skip.

{ $limit: 100 },
{ $limit: 15},
{ $skip: 5 },
{ $skip: 2 }

The $limit value has increased to the sum of the initial value and the $skip value. Then, for the final $limit value, the optimizer selects the minimum between the adjacent $limit values. For the final $skip value, the optimizer adds the adjacent $skip values, to transform the sequence to the following:

{ $limit: 15 },
{ $skip: 7 }

Projection Optimization

The aggregation pipeline can determine if it requires only a subset of the fields in the documents to obtain the results. If so, the pipeline will only use those required fields, reducing the amount of data passing through the pipeline.