$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: {

最低0.47元/天 解锁文章
2404

被折叠的 条评论
为什么被折叠?



