mongo聚合

aggregate

聚合框架是一个计算框架,类似于sql中的group by, join操作
整个聚合运算过程称为管道,由多个步骤组成:
原始数据 -> 步骤1 -> 中间结果1 -> 步骤2 -> 中间结果2 -> … -> 最终结果
聚合操作优先使用aggregate,相对来说较为高效

聚合运算的基本格式

pipeline = [stage1, stage2, ..., stageN]
db.COLLECTION.aggregate(pipeline, {options})

步骤类型

$match: 过滤 类似于where
$project: 投影 类似于AS
$sort: 排序 类似于ORDER BY
$group: 分组 类似于GROUP BY
$skip/$limit : 限制 类似于SKIP/LIMIT
$lookup:左外连接 LEFT OUTER JOIN
聚合函数

对于大的数据集,聚合函数通常执行起来满足不了用户对速度的需求

  • group
    group不会处理多余10000个唯一键且返回的结果集不能超过16MB,通常情况下速度快于map-reduce。
    group包含的参数:

    • key:描述分组字段的文档,比如要根据uerName分组,就将{userName:true}作为键
    • keyf:一个js函数,为文档生成一个键,这个函数生成{day:1}这样的键
    • initial:作为聚合结果初始值的文档
    • reduce:用语执行聚合的js函数,该函数有两个参数:正在被迭代的当前文档和用语存储聚合结果的聚合器文档,reduce并不返回任何内容
    • cond:过滤聚合文档的查询选择器,比如只想聚合5个以上投票的文档可以使用{value_count:{"$gt":5}}
    • finalize:在返回结果集之前应用于每个结果文档的js函数
  • map_reduce
    map_reduce所含参数:

    • map:应用于每个文档上的js函数,该函数必须调用emit()来选择要聚合的键和值
    • reduce:一个js函数,接受一个键和一个值列表,该函数返回值结构必须于values数组中所提供的结构一致
    • query:用于过滤映射处理集合,类似于group的cond参数
    • sort:排序
    • limit:限制查询和排序条数
    • out:决定了如何返回输出内容
    • finalize:js函数,在reduce阶段完成后会应用于每个返回的文档上
    • scope:指定了map,reduce,finalize函数可全局访问的变量的值
    • verbose:一个布尔值,为true时,返回的文档中包含map_reduce任务执行时间的统计
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值