On this page
$sort (aggregation)
在本页面
Definition
$sort
- 对所有 Importing 文档进行排序,并将它们按排序 Sequences 返回到管道。
$sort阶段具有以下原型形式:
{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
$sort接收一个文档,该文档指定要作为排序依据的字段以及相应的排序 Sequences。 <sort order>
可以具有以下值之一:
Value | Description |
---|---|
1 |
Sort ascending. |
-1 |
Sort descending. |
{ $meta: "textScore" } |
按计算的textScore 元数据按降序排序。有关示例,请参见Metadata Sort。 |
如果在多个字段上排序,则从左到右评估排序 Sequences。例如,在上面的表格中,文档首先按<field1>
排序。然后将具有相同<field1>
值的文档按<field2>
进一步排序。
Examples
Ascending/Descending Sort
对于要作为排序依据的一个或多个字段,将排序 Sequences 设置为1
或-1
分别指定升序或降序排序,如以下示例所示:
db.users.aggregate(
[
{ $sort : { age : -1, posts: 1 } }
]
)
此操作按age
字段的降序对users
集合中的文档进行排序,然后根据posts
字段中的值按升序对文档进行排序。
比较不同BSON types的值时,MongoDB 使用以下比较 Sequences,从最低到最高:
MinKey(内部类型)
Null
数字(整数,整数,双精度数,小数)
Symbol, String
Object
Array
BinData
ObjectId
Boolean
Date
Timestamp
Regular Expression
MaxKey(内部类型)
有关特定类型的比较/排序 Sequences 的详细信息,请参见Comparison/Sort Order。
Metadata Sort
在{ <sort-key> }
文档中,为计算出的元数据指定一个新的字段名称,并将$meta表达式指定为其值,如以下示例所示:
db.users.aggregate(
[
{ $match: { $text: { $search: "operating" } } },
{ $sort: { score: { $meta: "textScore" }, posts: -1 } }
]
)
此操作使用$text运算符来匹配文档,然后首先按"textScore"
元数据排序,然后按posts
字段的降序排序。指定的元数据确定排序 Sequences。例如,"textScore"
元数据按降序排序。有关元数据的更多信息,请参见$meta。
$ sort 运算符和内存
$ sort $ limit 内存优化
当管道中的$sort紧接在$limit之前时,$sort操作将仅保持n
的最高结果,其中n
是指定的限制,MongoDB 仅需要将n
项存储在内存中。当allowDiskUse
为true
且n
项超过聚合内存限制时,此优化仍然适用。
优化可能会在版本之间进行更改。
$ sort 和内存限制
$sort阶段的 RAM 限制为 100 MB。默认情况下,如果阶段超出此限制,则$sort将产生错误。要允许处理大型数据集,请将allowDiskUse
选项设置为true
以启用$sort操作写入临时文件。有关详细信息,请参见db.collection.aggregate()方法中的allowDiskUse
选项和aggregate命令。
在 2.6 版中进行了更改:$sort的内存限制从 RAM 的 10%更改为 100 MB 的 RAM。
$ sort 运算符和效果
将$sort运算符放置在管道的“开始”处或**在$project,$unwind和$group聚合运算符之前,可以利用索引。如果在$sort操作之前发生$project,$unwind或$group,则$sort不能使用任何索引。
See also