MongoDB的管道聚合

管道聚合可以实现很多数据处理和统计功能,并且随着不断的更新,其功能也越来越丰富。代表着NoSQL数据库的一种发展趋势。

管道聚合通过aggregate语句实现,支持多种匹配、处理、输出方式。

其语法是:

复制代码
db.<collection>.aggregate([{operator},{operator},{operator}......])

管道聚合操作中的前一条字句的处理结果可作为后一条字句的输入,从而实现管道化的顺序处理。管道聚合语句的输出为一组新的文档,可以将这些文档存入集合

语句中的{operator}即管道,由管道操作符和相应参数构成。常见的管道操作符有:group、project、match、sort、limit、skip等

注意:管道聚合是一个强大但繁琐的操作,在需要构建很多个聚合语句,语句当中包含着各式各样的括号嵌套,此时需要特别注意括号的匹配。在操作中很多的错误都是括号匹配错误导致的

1.$group与分组计数

$group表示分组

示例如下:

复制代码
db.<collection>.aggregate({"$group":{"_id":"$name","num":{"$sum":"$qty"}}})

_id是分组条件,值为集合中name字段的枚举值。num字段的结果为对集合的qty字段进行(分组)求和($num)所得的值

2.$match与文档匹配

$match表示聚合

示例如下:

复制代码
db.<collection>.aggregate({$match:{"price":{$gt:3.0,$lt:4.0}}})

这个例句的效果相当于

复制代码
db.<collection>.find({"price":{$gt:3.0,$lt:4.0}})

3.$set与字段赋值

$set表示进行字段赋值,如果字段不存在则新建字段

复制代码
db.<collection>.aggregate({$set:{descride:"fruit"}})

注意:聚合语句的set是构造并输出新文档,和更新语句的set不同,更新语句是将原有的文档进行修改

set还可以和一些运算操作符结合使用,例如:add/subtract/multiply/$divide(加、减、乘、除)

类似的操作符还有:log、pow、mod、round(对数计算、指数计算、求余数、取整/保留小数)

有一些运算符使用单个参数例如:$exp(计算以e为底的指数)

向使用单个参数的运算符还有:abs、ln、log10、sqrt等

4.显示控制

$sort表示排序

$limit表示限制输出的集合

$skip表示跳过n个集合输出

$project表示对显示结果字段进行调整,利用1和0显示开关

5.管道运算

sum/avg:求和/求平均

min/max:返回最小值/最大值

first/last:返回第一个/最后一个文档的字段数据

$push:将数据插入到一个数组中

注意min、max和push要与group一起使用

6.$out结果输出

将聚合结果写入新的集合

复制代码
db.<collection>.aggregate({$group:{_id:"$name",num:{$sum:"$price"}}},{$out:{db:"db_add",coll:"coll_add"}})

$out字句的db是指数据库名,coll是指集合名

相关推荐
Lethehong7 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码7 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty8 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
roman_日积跬步-终至千里9 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
猫咪很可爱9 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy10 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒10 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss27310 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_1800790524710 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
搞AI的金鱼11 小时前
skill agent workflow的区别
数据库