MongoDB(2)--聚合

文章目录[x]
  1. 0.1:MongoDB界面操作工具compass的安装
  2. 1:聚合
  3. 2:常用的管道命令
  4. 3:常用的表达式
  5. 3.1:我用test数据库下的集合练习一些语句

聚合(aggregate)是基于数据处理的聚合管道,小生个人认为类似于linux中的管道,就是上一个命令的输出等于下一个命令的输入。同时说一下MongoDB的界面化操作工具--MongoDB-Compass。

MongoDB界面操作工具compass的安装

官网下载:https://www.mongodb.com/download-center/compass

我这里是deepin系统安装,所以选的是Ubuntu版本

下载之后用下面命令安装一下

sudo dpkg -i <你下载的文件>

 

安装成功之后用mongodb-compass在终端中打开文件

然后点击连接(CONNECT)就会更新本地数据库--前提是你的MongoDB数据库已经在后台运行

聚合

语法:db.集合名称.aggregate({管道:{表达式}})

常用的管道命令

  •  $group: 将集合中的⽂档分组, 可⽤于统计结果
  • $match: 过滤数据, 只输出符合条件的⽂档
  • $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
  • $sort: 将输⼊⽂档排序后输出
  • $limit: 限制聚合管道返回的⽂档数
  • $skip: 跳过指定数量的⽂档, 并返回余下的⽂档
  • $unwind: 将数组类型的字段进⾏拆分

常用的表达式

这个在mysql中应该叫做聚合函数

  • $sum: 计算总和, $sum:1 表示以⼀倍计数
  • $avg: 计算平均值
  • $min: 获取最⼩值
  • $max: 获取最⼤值
  • $push: 在结果⽂档中插⼊值到⼀个数组中
  • $first: 根据资源⽂档的排序获取第⼀个⽂档数据 $last: 根据资源⽂档的排序获取最后⼀个⽂档数据

我用test数据库下的集合练习一些语句

先看一下数据库中的内容

1.查询年龄大于等于20岁,且家乡是桃花岛的

db.stu.find(
{$or:[{age:{$gte:20}},{hometown:{$in:["桃花岛"]}}]}
)

 

看一下结果

 

2.按照gender进行分组,获取不同组数据的个数和平均年龄

db.stu.aggregate(
{$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)

 

这里的1表示显示,不显示不用谢(_id不显示的话必须注明是0)

执行结果

3.按照hometown进行分组,获取不同组的平均年龄

db.stu.aggregate(
{$group:{_id:"$hometown",home_age:{$avg:"$age"}}}
)

 

执行结果

如果要是统计整个文档的话,可以将_id置为null,如

db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)

 

就是统计整个集合的人数和平均年龄

4.统计年龄大于二十岁的并且家乡是桃花岛、华山男生女生有多少

db.stu.aggregate(
{$match:{$or:[{age:{$gt:20}},{hometown:{$in:["华山","桃花岛"]}}]}},
{$group:{_id:"$gender",count:{$sum:1}}},
{$project:{_id:0,gender:"$_id",count:1}}
)

执行结果

5.提取豆瓣爬取到的电视剧json数据中的名称评论数以及名称

看一下源数据

db.tv.aggregate(
{$project:{title:1,_id:0,count:"$rating.count",rate:"$rating.value",country:"$tv_categroy"}}
)

 

执行结果

 

 

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00