Definition
$topNew in version 8.3.
Returns the top element within an array according to the specified sort order.
Note
Disambiguation
This page describes the $top expression operator. For the $top
accumulator operator, see $top (accumulator operator).
Syntax
When used as an expression operator, $top has the following syntax:
{ $top: { sortBy: <expression>, input: <expression> } }
Field | Necessity | Description |
|---|---|---|
sortBy | Required | Specifies the order of results. See Sort Behavior for more
information on |
input | Required | The array that |
Behavior
Sort Behavior
MongoDB sorts the input array based on the sortBy value. The following
table provides examples of different sort options:
input | sortBy | Sorted input | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| | ||||||||||
|
| | ||||||||||
|
| |
Input Values
The input field must resolve to an array. If you specify an input that is not
an array, MongoDB errors.
Example
The following example uses the movies collection from the sample_mflix
sample dataset. For details on how to load this dataset into
your deployment, see Load the sample dataset.
The movies collection contains documents that resemble the following
example:
{ _id: ObjectId('573a1396f29313caabce4a9a'), year: 1972, genres: [ 'Crime', 'Drama' ], title: 'The Godfather', cast: [ 'Marlon Brando', 'Al Pacino', 'James Caan', 'Richard S. Castellano' ], directors: [ 'Francis Ford Coppola' ], runtime: 175, ... }
The following aggregation pipeline uses $top on the cast
array to return the first cast member in alphabetical order for a specified
movie:
db.movies.aggregate([ { $match: { title: "The Godfather" } }, { $project: { _id: 0, title: 1, firstCastMemberAlphabetically: { $top: { sortBy: 1, input: "$cast" } } } } ])
[ { title: 'The Godfather', firstCastMemberAlphabetically: 'Al Pacino' } ]
In this example, $top sorts the existing cast array in ascending
alphabetical order and returns the first value.