MongoDB学习(五):聚合、管道与MapReduce

本文详细介绍了MongoDB的聚合操作与MapReduce,包括聚合管道的常用操作如$project、$match、$group等,以及如何提升管道性能。同时,讲解了MapReduce的基本原理及其在大数据处理中的应用。
摘要由CSDN通过智能技术生成

目录

一.聚合&管道

1.操作

2.例子

3.提高管道性能

二.Map/Reduce


聚合是MongoDB的高级查询框架,实际上在MySQL等关系数据库中,也有GROUP BY这样的类似功能。其主要作用是,从多个文档中提取、转换和整合数据,形成新的信息,可以用来发现文档间的一些关系,或者挖掘单个文档不具备的信息。例如,春节快到了,如果一家商店的店长想统计每月销售额、每种商品销售额、整年销售额,就必须以时间或商品ID作为分组条件进行统计。MongoDB提供了聚合和MapReduce两种工具,聚合要简单些。

一.聚合&管道

管道是计算机领域一个很普遍的概念,指的是对于一系列操作,前一个操作的结果通过管道输送给后一个操作,作为其输入。一个典型例子是linux的管道,通过配合grep、awk等工具,可以很方便的从命令行输出中提取出需要的信息。

1.操作

MongoDB有如下管道操作:

  • $project:可以用来修改文档的结构,类似于SQL的select
    • 可以用来对域进行重命名
    • 可以用来增加成员域
    • 可以删除指定域
  • $match:用于过滤出符合指定条件的文档,类似于SQL的where或having
  • $limit:用来限制管道流量
  • $skip:用来跳过指定数量的文档,返回剩余的文档
  • $unwind:将文档中某个数组类型字段进行拆分,为数组中的一个元素生成一个文档,类似于SQL的join
  • $group:将文档分组,类似于SQL的group by
    • 对于时间:
      • $dayOfYear: 返回该日期是这一年的第几天(全年 366 天)。
      •  $dayOfMonth: 返回该日期是这一个月的第几天(1到31)。
      •  $dayOfWeek: 返回的是这个周的星期几(1代表星期日,7代表星期六)。
      •  $year: 返回该日期的年份部分。
      •  $month: 返回该日期的月份部分( 1 到 12)。
      •  $week: 返回该日期是所在年的第几个星期( 0 到 53)。
      •  $hour: 返回该日期的小时部分。
      •  $minute: 返回该日期的分钟部分。
      •  $second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
      •  $millisecond:返回该日期的毫秒部分( 0 到 999)。
      •  $dateToString: { $dateToString: { format,date} } 按照format的格式,将date转换为字符串
    • 对于其他字段:使用聚合操作符
      • $sum:计算总和
      • $avg:计算平均值
      • $min:获取某个字段的最小值
      • $max:获取某个字段的最大值
      • $push:将结果插入到一个数组中
      • $addToSet:将结果插入到Set中(即不存在重复文档)
      • $first:按照指定字段排序,获取第一个文档
      • $last:按照指定字段排序,获取最后一个文档
  • $sort:对输入的文档进行排序
  • $geoNear:输出接近某一地理位置的GEO文档
  • $out:把管道内的文档写入集合
  • $redact:控制对某些数据的访问

聚合管道的使用形式为:

db.collection_name.aggregate(pipeline,options)

有如下选项:

  • explain:打印执行计划,布尔值
  • allowDiskUse:使用磁盘暂存中间结果,布尔值,主要是为了解决中间数据太大(100MB以上)导致的报错
  • cursor:用于逐个获取管道结果,避免超出16MB限制
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值