$sort(聚合)

在本页面

  • 定义

  • 例子

  • $sort Operator 和 Memory

  • $sort Operator 和 Performance

定义

  • $sort

    • 对所有输入文档进行排序,并将它们返回到 sorted order 中的管道。

$sort阶段具有以下原型形式:

{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }

$sort采用指定要排序的 field(s 的文档和相应的排序订单。 <sort order>可以具有以下值之一:

  • 1指定升序 order。

  • -1指定降序 order。

  • { $meta: "textScore" }按降序 order 中的计算textScore元数据排序。有关 example,请参见元数据排序。

例子

Ascending/Descending 排序

对于要排序的字段,请将 sort order 设置为1-1以分别指定升序或降序排序,如下面的示例所示:

db.users.aggregate(
   [
     { $sort : { age : -1, posts: 1 } }
   ]
)

此操作根据age字段对users集合中的文档进行排序,按降序 order 排序,然后根据posts字段中的 value 按升序排序。

当比较不同BSON 类型的值时,MongoDB 使用以下比较 order,从最低到最高:

  • MinKey(内部类型)

  • 空值

  • Numbers(整数,长整数,双精度数,小数)

  • 符号,String

  • 宾语

  • Array

  • BinData

  • ObjectId

  • Boolean

  • 日期

  • 时间戳

  • 正则表达式

  • MaxKey(内部类型)

有关特定类型的 comparison/sort order 的详细信息,请参阅Comparison/Sort Order。

元数据排序

{ <sort-key> }文档中指定计算元数据的新字段 name,并将$meta表达式指定为其 value,如下面的 example:

db.users.aggregate(
   [
     { $match: { $text: { $search: "operating" } } },
     { $sort: { score: { $meta: "textScore" }, posts: -1 } }
   ]
)

此操作使用$text operator 来匹配文档,然后首先按"textScore"元数据排序,然后按posts字段的降序 order 排序。指定的元数据确定 sort order。例如,"textScore"元数据按降序 order 排序。有关元数据的更多信息,请参见$meta。

$sort Operator 和 Memory

$sort $limit Memory Optimization

当$sort紧接在管道中的$limit之前时,$sort操作仅在进展时保持最高n结果,其中n是指定的限制,而 MongoDB 仅需要在 memory 中 store n项。当allowDiskUsetruen项超过聚合 memory 限制时,此优化仍适用。

优化可能会在不同版本之间发生变化。

$sort 和 Memory 限制

$sort阶段的 RAM 限制为 100 兆字节。默认情况下,如果阶段超出此限制,$sort将产生错误。要允许处理大型数据集,请将allowDiskUse选项设置为true以启用$sort操作以写入临时 files。有关详细信息,请参阅db.collection.aggregate()方法中的allowDiskUse选项和骨料命令。

更改 version 2.6:$sort的 memory 限制从 10%的 RAM 更改为 100 MB 的 RAM。

$sort Operator 和 Performance

$sort operator 可以在放置在管道的开头或**** $project,$unwind和$group聚合操作符之前使用索引。如果在$sort操作之前发生$project,$unwind或$group,则$sort不能使用任何索引。

也可以看看
使用 Zip Code 数据集进行聚合,使用用户首选项数据进行聚合