Mongo---聚合管道操作符将文档定制格式输出!!

常用聚合管道操作符

常用的几个聚合管道操作符:

操作符作用
$project修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档
$match用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作
$limit用来限制MongoDB聚合管道返回的文档数
$skip在聚合管道中跳过指定数量的文档,并返回余下的文档
$unwind将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
$group将集合中的文档分组,可用于统计结果
$sort将输入文档排序后输出

注意:以上操作不会修改集合的内容,只是将集合以指定形式输出

在数据库 mydb1 有集合 educoder 内容如下:

_idcourseauthortagslearning_num
1Python表达式问题求解实训李暾Python基础,求解1882
2Java语言之基本语法余跃Java基础,语法814
3Python面向对象编程实训李暾Python基础,面向对象143
4Android综合实训之物联网移动应用开发(1)prophet5Android,物联网,移动开发207
$project 修改文档结构输出

有时候我们并不会用到文档的全部内容,只是使用其中几列,这时候就可以使用 $project 进行操作;或者有时候要重命名键值(列名),也可以使用 $project。

对集合 educoder 进行操作:

  • 只输出作者 author 和学习人数 learning_num 信息,_id也不要不显示(_id默认是显示的):
  1. db.educoder.aggregate({$project:{_id:0,author:1,learning_num:1}})
  • 0 为不显示,非 0 为显示。

运行结果如图1所示:

图1

                                                                       图 1

  • 重命名字段名(把 learning_num 重命名为 num):
  1. db.educoder.aggregate({$project:{course:1,authoe:1,tags:1,num:'$learning_num'}})

运行结果如图2所示:

                                                                      图 2

$match 筛选文档输出

有时候我们要在集合中筛选出符合特定条件的文档,这时候使用 $match 便可以很快实现。

只输出作者为“李暾”的文档:

  1. db.educoder.aggregate({$match:{author:'李暾'}})

运行结果如图3所示:

图3

                                                                 图 3

$limit 限制文档数量输出

有时候集合中文档数量太大,我们只想选取前几行查看一下,这时候就可以用 $limit,输出前2条文档:

  1. db.educoder.aggregate({$limit:2})

运行结果如图4所示:

图1

                                                                            图 4

$skip 跳过前 n 条文档输出

与 $limit 相反,$skip 是跳过前 n 条文档,显示剩余文档。

将集合 educoder 中的前两条文档跳过,显示剩余文档:

  1. db.educoder.aggregate({$skip:2})
  • $skip 接受一个数字 n,表示丢弃结果集中的前 n 个文档;

运行结果如图5所示:

                                                                       图 5

$limit 与 $skip 可以组合使用:

  1. db.educoder.aggregate([{$skip:1},{$limit:2}])
  2. #跳过第一条,显示前两条,也就是显示第2-3条文档
  3. db.educoder.aggregate([{$limit:2},{$skip:1}])
  4. #显示前两条,跳过第一条,也就是显示第2条文档

运行结果如图6所示:

图3

                                                                    图 6

$unwind 拆分数组类型字段

将 educoder 中的 tags 字段拆分成多条,每条包含数组中的一个值:

  1. db.educoder.aggregate({$unwind:'$tags'})

运行结果如图7所示:

图4

                                                                          图 7

$group 分组输出

该操作比较常用,因为文档分组后利于我们的统计。比如,按照作者分组我们就可以统计出该集合总共有几个作者。

在集合 educoder 中,按作者分组:

  1. db.educoder.aggregate({$group:{_id:'$author'}})

运行结果如图8所示:

图5

                                                                         图 8

$sort 排序输出

按照学习人数 learning_num 降序排序输出文档:

  1. db.educoder.aggregate({$sort:{learning_num:-1}})
  • -1 代表降序排序, 1 代表升序排序。

运行结果如图9所示:

图6

                                                                    图 9

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuhao_

谢谢你打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值