On this page
$sort (aggregation)
Definition
$sort
-
Sorts all input documents and returns them to the pipeline in sorted order.
The
$sort
stage has the following prototype form:{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
$sort
takes 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 1
Sort ascending. -1
Sort descending. { $meta: "textScore" }
Sort by the computed textScore
metadata in descending order. See 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:
db.users.aggregate(
[
{ $sort : { age : -1, posts: 1 } }
]
)
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.
Metadata Sort
Specify in the { <sort-key> }
document, a new field name for the computed metadata and specify the $meta
expression as its value, as in the following example:
db.users.aggregate(
[
{ $match: { $text: { $search: "operating" } } },
{ $sort: { score: { $meta: "textScore" }, posts: -1 } }
]
)
This operation uses the $text
operator to match the documents, and then sorts first by the "textScore"
metadata and then by descending order of the posts
field. The specified metadata determines the sort order. For example, the "textScore"
metadata sorts in descending order. See $meta
for more information on metadata.
$sort
Operator and Memory
$sort
+ $limit
Memory Optimization
When a $sort
immediately precedes a $limit
in the pipeline, the $sort
operation only maintains the top n
results as it progresses, where n
is the specified limit, and 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.
Changed in version 2.6: The memory limit for $sort
changed from 10 percent of RAM to 100 megabytes of RAM.