- Reference >
- Operators >
- Aggregation Pipeline Stages >
- $sort (aggregation)
$sort (aggregation)¶
Definition¶
-
$sort¶ Sorts all input documents and returns them to the pipeline in sorted order.
The
$sortstage has the following prototype form:$sorttakes a document that specifies the field(s) to sort by and the respective sort order.<sort order>can have one of the following values:Value Description 1Sort ascending. -1Sort descending. { $meta: "textScore" }Sort by the computed textScoremetadata in descending order. See Text Score Metadata Sort for an example.If sorting on multiple fields, sort order is evaluated from left to right. For example, in the form above, documents are first sorted by
<field1>. Then documents with the same<field1>values are further sorted by<field2>.
Examples¶
Ascending/Descending Sort¶
For the field or fields to sort by, set the sort order to 1 or -1 to
specify an ascending or descending sort respectively, as in the following example:
This operation sorts the documents in the users collection,
in descending order according by the age field and then in
ascending order according to the value in the posts field.
When comparing values of different BSON types, MongoDB uses the following comparison order, from lowest to highest:
- MinKey (internal type)
- Null
- Numbers (ints, longs, doubles, decimals)
- Symbol, String
- Object
- Array
- BinData
- ObjectId
- Boolean
- Date
- Timestamp
- Regular Expression
- MaxKey (internal type)
For details on the comparison/sort order for specific types, see Comparison/Sort Order.
Text Score Metadata Sort¶
For a pipeline that includes a $text search, you can sort by
descending relevance score using the { $meta: "textScore"
} expression. In the { <sort-key> } document, set the
{ $meta: "textScore" } expression to an arbitrary
field name. The field name is ignored by the query system. For example:
This operation uses the $text operator to match the documents,
and then sorts first by the "textScore" metadata in descending
order, and then by the posts field in descending order. The
score field name in the sort document is ignored by the query
system. In this pipeline, the "textScore" metadata is not included
in the projection and is not returned as part of the matching
documents. See $meta for more information.
$sort Operator and Memory¶
$sort + $limit Memory Optimization¶
When a $sort precedes a $limit and there are no
intervening stages that modify the number of documents, the optimizer can
coalesce the $limit into the $sort. This allows
the $sort operation to only
maintain the top n results as it progresses, where n is the
specified limit, and ensures that MongoDB only needs to store n items in memory.
This optimization still applies when allowDiskUse is true and
the n items exceed the aggregation memory limit.
Optimizations are subject to change between releases.
$sort and Memory Restrictions¶
The $sort stage has a limit of 100 megabytes of RAM. By
default, if the stage exceeds this limit, $sort will
produce an error. To allow for the handling of large datasets, set the
allowDiskUse option to true to enable $sort
operations to write to temporary files. See the allowDiskUse
option in db.collection.aggregate() method and the
aggregate command for details.