MongoDB聚合: $sortByCount
$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: { $sum: 1 } } },
{ $sort: { count: -1 } }
举例:
exhibits集合中有下面的文档:
{ "_id" : 1, "title" : "The Pillars of Society", "artist" : "Grosz", "year" : 1926, "tags" : [ "painting", "satire", "Expressionism", "caricature" ] }
{ "_id" : 2, "title" : "Melancholy III", "artist" : "Munch", "year" : 1902, "tags" : [ "woodcut", "Expressionism" ] }
{ "_id" : 3, "title" : "Dancer", "artist" : "Miro", "year" : 1925, "tags" : [ "oil", "Surrealism", "painting" ] }
{ "_id" : 4, "title" : "The Great Wave off Kanagawa", "artist" : "Hokusai", "tags" : [ "woodblock", "ukiyo-e" ] }
{ "_id" : 5, "title" : "The Persistence of Memory", "artist" : "Dali", "year" : 1931, "tags" : [ "Surrealism", "painting", "oil" ] }
{ "_id" : 6, "title" : "Composition VII", "artist" : "Kandinsky", "year" : 1913, "tags" : [ "oil", "painting", "abstract" ] }
{ "_id" : 7, "title" : "The Scream", "artist" : "Munch", "year" : 1893, "tags" : [ "Expressionism", "painting", "oil" ] }
{ "_id" : 8, "title" : "Blue Flower", "artist" : "O'Keefe", "year" : 1918, "tags" : [ "abstract", "painting" ] }
以下操作会展开tags数组,并使用$sortByCount阶段来计算与每个tag相关的文档数:
db.exhibits.aggregate( [ { $unwind: "$tags" }, { $sortByCount: "$tags" } ] )
操作将返回以下文件,按计数降序排序:
{ "_id" : "painting", "count" : 6 }
{ "_id" : "oil", "count" : 4 }
{ "_id" : "Expressionism", "count" : 3 }
{ "_id" : "Surrealism", "count" : 2 }
{ "_id" : "abstract", "count" : 2 }
{ "_id" : "woodblock", "count" : 1 }
{ "_id" : "woodcut", "count" : 1 }
{ "_id" : "ukiyo-e", "count" : 1 }
{ "_id" : "satire", "count" : 1 }
{ "_id" : "caricature", "count" : 1 }
相关文章:
MongoDB聚合: $sortByCount
$sortByCount聚合根据指定表达式的值对输入文档进行分组,然后计算每个不同分组中的文档数。 每个输出文档包含两个字段:一个是包含不同分组值的_id字段,另一个是包含属于该分组或类别的文档数量的计数字段。 文档按计数降序排序。 语法 {…...
FY-SA-20237·8-AI‘sIQ
Translated from the Scientific American, July/August 2023 issue. AI’s IQ ChatGPT aced a test but showed that intelligence cannot be measure by IQ alone. —— By Eka Roivainen 翻译:ChatGPT在一项测试中取得了优异的成绩,但也表明智力不能…...
react将选中文本自动滑动到容器可视区域内
// 自动滚动到可视区域内useEffect(() > {const target ref;const wrapper wrapperRef?.current;if (target && wrapperRef) {const rect target.getBoundingClientRect();const wrapperRect wrapper.getBoundingClientRect();const isVisible rect.bottom &l…...
Rust语言入门小结(第1篇)
Rust是一种新兴编程语言,既有高级语言的风格,又有底层语言级别的性能;是对于实时性、安全性要求高的应用开发的理想语言。 笔者的自学记录,供参考 环境搭建与第一个Rust程序 以Linux环境为例 # 下载并安装 curl --proto https -…...
前端实现支付跳转以及回跳
// 支付地址 const baseURL http://pcapi-xiaotuxian-front-devtest.itheima.net/ const backURL http://127.0.0.1:5173/paycallback const redirectUrl encodeURIComponent(backURL) const payUrl ${baseURL}pay/aliPay?orderId${route.query.id}&redirect${redirec…...
黑豹程序员-封装组件-Vue3 setup方式子组件传值给父组件
需求 封装组件 需要使用到Vue3中如何定义父子组件,由子组件给父组件传值 核心代码 如何使用emits 组件 <template><button click"sendData">点击按钮</button> </template><script setup> import {ref, defineEmits}…...
PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle、Spark执行流程
目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快? Spa…...
PCIE Order Set
1 Training Sequence Training Sequence是由Order Set(OS) 组成,它们主要是用于bit aligment,symbol aligment,交换物理层的参数。当data_rate 2.5GT or 5GT 它们不会被扰码(scramble),当date_rate 8GT or higher 根据特殊的规则…...
nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(下)
目录 7. 实现一个UDP健康检测功能7.1 功能定义7.2 定义一个新的健康检测类型7.3 增加udp特定的健康检测需要的配置指令7.3.1 ngx_http_upstream_check_srv_conf_s结构体的扩展7.3.2 check_udp_send的实现7.3.3 check_udp_expect的实现7.3.4 16进制解码代码的实现7.4 ngx_http_u…...
基于SSM的网络在线考试系统(有报告)。Javaee项目。ssm项目。
演示视频: 基于SSM的网络在线考试系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring …...
【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析
文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…...
python+flask人口普查数据的应用研究及实现django
作为一款人口普查数据的应用研究及实现,面向的是大多数学者,软件的界面设计简洁清晰,用户可轻松掌握使用技巧。在调查之后,获得用户以下需求: (1)用户注册登录后,可进入系统解锁更多…...
C语言:函数
C语言:函数 函数的概念库函数自定义函数实参与形参return语句数组做参数声明与定义externstatic 嵌套调用 函数的概念 在C语言中,存在一个函数的概念,有人也将其翻译为子程序。 在数学中,函数是一个完成特定功能的公式࿰…...
jmeter-问题一:关于线程组,线程数,用户数详解
文章目录 jmeter参数介绍1.线程数2.准备时长(Ramp-up)3.循环次数4.same user on each iteratio5.调度器 场景一:当你的线程组中线程数为1,循环为1场景二:当你的线程组中线程数为2,循环为1场景三:当你的线程组中线程数为1ÿ…...
golang 通过 cgo 调用 C++ 库
思路 将 C 库包装成 C 库 -> golang 通过 cgo 调用 C 库 C 相关文件 目录列表 include/ some.h C 库头文件some_wrapper.h < 用于将 C 库包装成 C 库的头文件 lib/ libsome.a C 库 src/ some_wrapper.cpp < 用于将 C 库包装成 C 库的源码文件 源码示例 some.h…...
使用 IDEA 开发一个简单易用的 SDK
目录 一、什么是 SDK 二、为什么要开发 SDK 三、开发 SDK 的详细步骤 四、导入 SDK 进行测试 附:ConfigurationProperties 注解的介绍及使用 一、什么是 SDK 1. 定义:软件开发工具包 Software Development Kit 2. 用于开发特定软件或应用程序的工…...
CSS transition(过渡效果)详解
CSS过渡效果(Transition)是一种在CSS3中引入的动画效果,它允许开发者在元素状态变化时(如鼠标悬停、类更改等)平滑地改变CSS属性值,从而创建出平滑的动画效果。过渡效果可以应用于多种CSS属性,如…...
Android13多媒体框架概览
Android13多媒体框架概览 Android 多媒体框架 Android 多媒体框架旨在为 Java 服务提供可靠的接口。它是一个系统,包括多媒体应用程序、框架、OpenCore 引擎、音频/视频/输入的硬件设备,输出设备以及一些核心动态库,比如 libmedia、libmedi…...
一文读懂:MybatisPlus从入门到进阶
快速入门 简介 在项目开发中,Mybatis已经为我们简化了代码编写。 但是我们仍需要编写很多单表CURD语句,MybatisPlus可以进一步简化Mybatis。 MybatisPlus官方文档:https://www.baomidou.com/,感谢苞米豆和黑马程序员。 Mybat…...
C语言--------指针(1)
0.指针&指针变量 32位平台,指针变量是4个字节(32bit/84)--------x86 64位平台,指针变量是8个字节(64bit/88)--------x64 编号指针地址;我们平常讲的p是指针就是说p是一个指针变量; ************只要…...
分享!关于虚拟机性能优化实战的技术文(进击篇 学习资料自提取)
一、 综述与基础理论类文献 (帮助构建背景和原理部分大纲) 虚拟化技术综述: 查找标题包含“虚拟化技术综述”、“虚拟化原理与发展”等关键词的中文学术论文或书籍章节。这些文献通常会涵盖CPU虚拟化、内存虚拟化、I/O虚拟化等核心技术,为理解性能瓶颈和…...
在线音视频处理工具实测对比:视频压缩、格式转换、音频提取哪家强?
一、为什么要关注在线音视频工具?先看一组数据。根据多家市场研究机构的报告,全球视频处理相关市场规模近年来持续增长,视频内容的生产量每年都在翻倍。各大平台每天新增的视频播放时长以亿计——这意味着越来越多的普通用户和创作者…...
mikupad:单文件AI写作前端,兼容多后端与深度创作控制
1. 项目概述:一个单文件全能的AI写作前端如果你和我一样,经常折腾各种本地大语言模型,那你一定对“前端界面”这件事深有体会。Oobabooga的WebUI功能强大但略显臃肿,KoboldCPP的界面简洁但可定制性有限,而各种API调用又…...
手机跑多模态也能快到飞起!面壁MiniCPM-V 4.6开源
大模型技术正快步从云端机房走入普通人的智能手机,让移动设备直接处理复杂的图文与视频任务成为现实。面壁智能最新开源的一款多模态模型,以极低的算力成本,超低的首Token延迟,成功打通当前三大主流手机操作系统。MiniCPM-V 4.6专…...
漏洞审计实战:从思维模式到工具协同的代码安全深度剖析
1. 项目概述:从“bug-audit-skill”看漏洞审计的实战化沉淀最近在GitHub上看到一个名为“bug-audit-skill”的项目,作者是abczsl520。这个项目名直译过来就是“漏洞审计技能”,它不像一个具体的工具,更像是一个知识库或经验集。在…...
构建现代化网络拓扑可视化的完整解决方案
构建现代化网络拓扑可视化的完整解决方案 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo 在数字化转型浪潮中,网络架构日益复杂,传统的手绘拓扑图已无法满足现代运维需…...
别再让FTP匿名登录成后门!手把手教你加固vsftpd服务(附CentOS 7实战配置)
企业级vsftpd安全加固实战指南:从匿名登录风险到全方位防护 FTP服务作为企业文件传输的经典解决方案,至今仍在许多组织的IT架构中扮演重要角色。然而,默认配置下的vsftpd服务往往隐藏着致命的安全隐患——匿名登录功能如同一扇未上锁的后门&a…...
PS抠头发太费劲?几种简单方法轻松搞定
作为一名从事平面设计5年的老选手,抠头发绝对是PS修图中最让人头疼的环节——要么抠不干净留杂边,要么太用力丢失细碎发丝,尤其是面对杂色背景、飘逸长发、逆光发丝时,更是让人束手无策。今天就给大家分享3种超实用的PS抠头发丝方…...
Python自动化数据简报:从零构建代码驱动的报告系统
1. 项目概述:数据简报的“瑞士军刀”在数据驱动的时代,无论是数据分析师、产品经理还是业务运营,每天都要面对海量的数据源和复杂的分析需求。我们常常陷入这样的困境:为了一个简单的数据洞察,需要打开多个工具&#x…...
码农的职业天花板:30岁前必须突破的5个瓶颈
在软件行业的快速迭代浪潮中,软件测试从业者作为质量保障的核心力量,正面临着愈发严峻的职业挑战。30岁,不仅是人生的重要分水岭,更是测试人职业发展的关键节点。如果不能在这个阶段突破潜藏的瓶颈,很可能会陷入“经验…...
