$sortByCount
聚合根据指定表达式的值对输入文档进行分组,然后计算每个不同分组中的文档数。
每个输出文档包含两个字段:一个是包含不同分组值的_id
字段,另一个是包含属于该分组或类别的文档数量的计数字段。
文档按计数降序排序。
语法
{
$sortByCount: <expression> }
expression
是要分组的表达式,可以指定除文档字面以外的任何表达式。
如果要指定字段路径,需要在字段名前加上美元符号$
并用引号引起来,例如,要按employee
字段分组,可指定"$employee"
作为表达式。
{
$sortByCount: "$employee" }
虽然不能为分组表达式指定文档字面意义,但可以指定一个字段或一个表达式来生成文档。例如,如果employee
字段和business
字段都是文档字段,那么$mergeObjects
表达式就可以作为 $sortByCount
的有效参数:
{
$sortByCount: {
$mergeObjects: [ "$employee", "$business" ] } }
但是,下面使用文档字面表达式的示例是错误的:
{
$sortByCount: {
lname: "$employee.last", fname: "$employee.first" } }
用法
$sortByCount
受100M内存使用限制,如果需要额外空间,可以将临时文件写入磁盘。
从MongoDB6.0开始,需要100兆内存才能执行的管道阶段会默认将临时文件写入磁盘。在 MongoDB 早期版本中,必须传递{ allowDiskUse: true}
才能启用。
单个查找和聚合命令可以通过以下任一方式覆盖allowDiskUseByDefault
参数:
-
当
allowDiskUseByDefault
设置为false
时,使用{ allowDiskUse: true}
可以把临时文件写入磁盘 -
当
allowDiskUseByDefault
设置为true
时,使用{ allowDiskUse: false}
将禁止把临时文件写入磁盘。
$sortByCount
阶段等价于$group + $sort
:
{
$group: {
_id: <expression>, count: {