- Reference >
- Operators >
- Aggregation Pipeline Operators >
- $maxN (aggregation accumulator)
$maxN (aggregation accumulator)¶
On this page
Definition¶
-
$maxN
¶ New in version 5.2.
Returns an aggregation of the maxmimum value
n
elements within a group. If the group contains fewer thann
elements,$maxN
returns all elements in the group.
Syntax¶
input
specifies an expression that is the input to$maxN
. It is evaluated for each element in the group and$maxN
preserves the maximumn
values.n
limits the number of results per group andn
has to be a positive integral expression that is either a constant or depends on the_id
value for$group
.
Behavior¶
Null and Missing Values¶
$maxN
filters out null and missing values.
Consider the following aggregation that returns the maximum n
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
maximumThreeScores
field is specified as$maxN
withinput : "$score"
and returned as an array. - Since there are only 3 documents with
scores
maxN
returns the maximum 3score
fields even thoughn = 4
.
Restrictions¶
Window Function and Aggregation Expression Support¶
You can use $maxN
as an accumulator.
$maxN
is supported as an
aggregation expression.
$maxN
is supported as a
window operator
.
Memory Limit Considerations¶
Aggregation pipelines which call $maxN
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 Maximum Three Scores
for a Single Game¶
You can use the $maxN
accumulator to find the maximum 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 input for
$maxN
withinput : ["$score","$playerId"]
. - Uses
$maxN
to return the maximum three score elements for theG1
game withn : 3
.
The operation returns the following results:
Finding the Maximum Three Scores Across Multiple Games¶
You can use the $maxN
accumulator to find the maximum n
scores in each game.
The example pipeline:
- Uses
$group
to group the results bygameId
. - Uses
$maxN
to return the maximum three score elements for each game withn: 3
. - Specifies the fields that are input for
$maxN
withinput: ["$score","$playerId"]
.
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
$maxN
withinput : ["$score","$playerId"]
. - If the
gameId
isG2
thenn
is 1, otherwisen
is 3.
The operation returns the following results: