- Reference >
- Operators >
- Aggregation Pipeline Operators >
- $lastN (aggregation accumulator)
$lastN (aggregation accumulator)¶
On this page
Definition¶
-
$lastN
¶ New in version 5.2.
Returns an aggregation of the last
n
elements within a group. The elements returned are meaningful only if in a specified sort order. If the group contains fewer thann
elements,$lastN
returns all elements in the group.
Syntax¶
input
specifies the field(s) from the document to take the lastn
of. Input can be any expression.n
has to be a positive integral expression that is either a constant or depends on the_id
value for$group
. For details see group key example.
Behavior¶
Null and Missing Values¶
$lastN
does not filter out null values.$lastN
converts missing values to null.
Consider the following aggregation that returns the last five documents from a group:
In this example:
$documents
creates the literal documents that contain player scores.$group
groups the documents bygameId
. This example has only onegameId
,G1
.PlayerD
has a missing score andPlayerE
has a nullscore
. These values are both considered as null.- The
lastFiveScores
field is specified usinginput : "$score"
and returned as an array. - Since there is no sort criteria the last 5
score
fields are returned.
Comparison of $lastN
and $bottomN
¶
Both $lastN
and $bottomN
accumulators can accomplish similar
results.
In general:
- If the documents coming into
$group
are already ordered, you should use$lastN
. - If you’re sorting and selecting the bottom
n
elements then you can use$bottomN
to accomplish both tasks with one accumulator. $lastN
can be used as an aggregation expression,$bottomN
cannot.
Restrictions¶
Window Function and Aggregation Expression Support¶
$lastN
is supported as an
aggregation expression.
For details on aggregation expression usage see Using $lastN as an Aggregation Expression.
$lastN
is supported as a
window operator
.
Memory Limit Considerations¶
Aggregation pipelines which call $lastN
are subject to the
100 MB limit. If this
limit is exceeded for an individual group, the aggregation fails
with an error.
Examples¶
Consider a gamescores
collection with the following documents:
Find the Last Three Player Scores for a Single Game¶
You can use the $lastN
accumulator to find the last three scores
in a single game.
The example pipeline:
- Uses
$match
to filter the results on a singlegameId
. In this case,G1
. - Uses
$group
to group the results bygameId
. In this case,G1
. - Specifies the fields that are output from
$lastN
withoutput : ["$playerId"," $score"]
. - Uses
$lastN
to return the last three documents for theG1
game withn : 3
.
The operation returns the following results:
Finding the Last Three Player Scores Across Multiple Games¶
You can use the $lastN
accumulator to find the last n
input fields in each game.
The example pipeline:
- Uses
$group
to group the results bygameId
. - Uses
$lastN
to return the last three documents for each game withn: 3
. - Specifies the fields that are input for
$lastN
withinput : ["$playerId", "$score"]
.
The operation returns the following results:
Using $sort
With $lastN
¶
Using a $sort
stage earlier in the pipeline can influence the
results of the $lastN
accumulator.
In this example:
{$sort : { score : -1 } }
sorts the highest scores to the back of each group.lastN
returns the three lowest scores from the back of each group.
The operation returns the following results:
Computing n
Based on the Group Key for $group
¶
You can also assign the value of n
dynamically. In this example,
the $cond
expression is used on the gameId
field.
The example pipeline:
- Uses
$group
to group the results bygameId
. - Specifies the fields that input for
$lastN
withinput : "$score"
. - If the
gameId
isG2
thenn
is 1, otherwisen
is 3.
The operation returns the following results:
Using $lastN
as an Aggregation Expression¶
You can also use $lastN
as an aggregation expression.
In this example:
$documents
creates the literal document that contains an array of values.$project
is used to return the output of$lastN
._id
is omited from the output with_id : 0
.$lastN
uses the input array of[10, 20, 30, 40]
.- The last three elements of the array are returned for the input document.
The operation returns the following results: