mongodb Aggregation聚合操作之$sort

在上一篇 mongodb Aggregation聚合操作之$match 中详细介绍了mongodb聚合操作中的$match使用以及参数细节。本篇将开始介绍Aggregation聚合操作中的$sort操作。

说明:

 对所有输入文档进行排序,并将它们按排序顺序返回到管道。

语法:

 { $sort: { : , : ... } }

$sort接收一个文档,该文档指定要排序的字段和相应的排序顺序。<排序顺序>可以有以下值之一:

1:升序排序

-1:降序排序

{ $meta: "textScore" }:按计算的textScore元数据降序排序。

注意【如果对多个字段进行排序,则从左到右计算排序顺序。例如,在上面的表单中,文档首先按排序。然后,具有相同值的文档按进一步排序。】示例

1. 示例

1.1. 普通排序


对于要排序的字段或字段,将排序顺序设置为1或-1,分别指定升序或降序排序,如下例所示:该操作对users集合中的文档进行排序,根据age字段降序排列,然后根据posts字段中的值升序排列。

db.users.aggregate(

   [

     { $sort : { age : -1, posts: 1 } }

   ]

)

1.2. 元数据排序


在{}文档中指定计算出的元数据的新字段名,并指定$meta表达式作为它的值,如下面的示例所示:该操作使用$text操作符匹配文档,然后首先按“textScore”元数据排序,然后按posts字段的降序排序。指定的元数据决定排序顺序。例如,“textScore”元数据按降序排序。

db.users.aggregate(

   [

     { $match: { $text: { $search: "operating" } } },

     { $sort: { score: { $meta: "textScore" }, posts: -1 } }

   ]

)


1.3. $sort操作符和内存


$sort + $limit内存优化

当$sort在$limit之前并且没有修改文档数量的中间阶段时,优化器可以将$limit合并到$sort中。这允许$sort操作在进行过程中只维护顶部的n个结果,其中n是指定的限制,并确保MongoDB只需要在内存中存储n个项目。当allowDiskUse为true且n项超过聚合内存限制时,这种优化仍然适用。优化可能会在不同版本之间发生变化。

1.4. $sort和内存限制


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

版本2.6中的变化:$sort的内存限制从RAM的10%更改为100兆字节。

1.5. $sort操作符和性能


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

你可能感兴趣的:(mongodb Aggregation聚合操作之$sort)