1. 管道阶段和可调参数

聚合框架基于管道的概念。他由多个阶段组成,每个阶段都会提供一组按钮或可调参数。每个阶段对其输入执行不同的数据处理任务,并生成文档已作为输出传递到下一阶段。

2. 阶段常见操作

匹配(match)、投射(project)、排序(sort)、跳过(skip)、限制(limit)

如以下命令包括此五阶段

db.getCollection('users').aggregate([
{$match: {age: 42}},
{$sort: {username: 1}},
{$skip: 10},
{$limit: 5},
// 投射其实就是文档的展示信息控制
{$project: {_id: 0, username: 1}}
])
2.1 $unwind对数组进行展开
// 展开前
db.food.find({})
_id fruit
1 (Array) 3 Elements
2 (Array) 3 Elements
3 (Array) 3 Elements
// 展开后
db.food.aggregate([
// $fruit表示取字段fruit展开
{$unwind: "$fruit"}
])
_id fruit
1 apple
1 banana
1 peach
2 apple
2 kumquat
2 orange
3 cherry
3 banana
3 apple
2.2 数组表达式
// 首先插入两个文档
db.blog.insert({'title': 'mongo', 'comments': [{'vote': 100, 'info': 'good'}, {'vote': 110, 'info': 'ok'}]});
db.blog.insert({'title': 'es', 'comments': [{'vote': 90, 'info': 'ok'}, {'vote': 80, 'info': 'bad'}]});

过滤出数组中点赞数大于100的文档

// input表示将要过滤的字段$取字段值 as定义变量 $$用来引入表达式中定义的变量
db.blog.aggregate([
{$match: {}},
{$project: {_id: 0, title: 1, comments: {$filter: {input: "$comments", as: 'comment', cond: {$gte: ['$$comment.vote', 110]}}}}}
])

查询结果如下:

{
"title": "mongo",
"comments": [
{
"vote": 110,
"info": "ok"
}
]
}
{
"title": "es",
"comments": [ ]
}
3. 分组简介
// 先插入文档
db.blog.insert({'title': 'es', 'comments': [{'vote': 80, 'info': 'ok'}, {'vote': 70, 'info': 'bad'}]});
// _id为分组的字段,多个可以{title: '$title', 'comments': '$comments'}
// num名称自定义,可以$sum求和 $avg平均等
db.getCollection('blog').aggregate([
{$group: {_id: 'title', num: {$sum: 1}}}
])

分组结果如下:

{
"_id": "title",
"num": 3
}
db.deal_price.aggregate([
{$match: {'city': {'$in': ['东莞', '佛山', '深圳', '长沙', '中山', '广州', '珠海', '韶关', '合肥', '清远', '惠州']}, 'trade_date': {'$gte': ISODate('2022-06-19')}, 'avg_price': {'$ne': null} }},
{$project: {_id: 0, city: 1, region: 1, district_name: 1, avg_price: 1}},
{$group: {_id: {city: '$city', region: '$region', 'district_name': '$district_name'}, avg_price: {$avg: '$avg_price'}}}
])

欢迎关注公众号算法小生沈健的技术博客

7.MongoDB系列之聚合框架的更多相关文章

  1. MongoDB系列六(聚合).

    一.概念 使用聚合框架可以对集合中的文档进行变换和组合.基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理.这些构件包括筛选(filtering).投射(project ...

  2. mongodb的高级操作(聚合框架)

    group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍 参考 官网:http://docs.mongodb.org/ma ...

  3. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  4. 在MongoDB中实现聚合函数 (转)

    随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...

  5. MongoDB的aggregate聚合

    聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...

  6. 在MongoDB中实现聚合函数

    在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...

  7. MongoDB中的聚合操作

    根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...

  8. 005.MongoDB索引及聚合

    一 MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处 ...

  9. Sql Server来龙去脉系列之二 框架和配置

    本节主要讲维持数据的元数据,以及数据库框架结构.内存管理.系统配置等.这些技术点在我们使用数据库时很少接触到,但如果要深入学习Sql Server这一章节也是不得不看.本人能力有限不能把所有核心的知识 ...

随机推荐

  1. 适合初学者的使用CNN的数字图像识别项目:Digit Recognizer with CNN for beginner

    准备工作 数据集介绍 数据文件 train.csv 和 test.csv 包含从零到九的手绘数字的灰度图像. 每张图像高 28 像素,宽 28 像素,总共 784 像素.每个像素都有一个与之关联的像素 ...

  2. 见微知著,细节上雕花:SVG生成矢量格式网站图标(Favicon)探究

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_215 Favicon是favorites icon的缩写,也被称为website icon(站点图标).page icon(页面图 ...

  3. while,do while,for循环语句

    循环语句 循环包含三大语句-----while语句 do while语句 for语句 循环三要素 初始值(初始的变量值) 迭代量(基于初始值的改变) 条件(基于初始值的判断) while语句 var ...

  4. 微信小程序检查版本更新并重启

    目录 1,前言 2,解决方案 3,调试须知 1,前言 最近开发小程序时候碰上了一个问题,当发布新版本小程序后,需要用户能赶紧用上最新的,避免出问题.查了一下官方文档,总结出几个情况如下: 微信运行时, ...

  5. java-前端之js

    js: js的三种形式: <!-- 事件:就是用户的操作或者动作,就是js被调用的时机:如:单机事件,双击事件 --> <!-- 1.事件定义式:在定义事件时直接写js --> ...

  6. Java核心知识体系4:AOP原理和切面应用

    1 概述 我们所说的Aop(即面向切面编程),即面向接口,也面向方法,在基于IOC的基础上实现. Aop最大的特点是对指定的方法进行拦截并增强,这种增强的方式不需要业务代码进行调整,无需侵入到业务代码 ...

  7. 详解MySQL隔离级别

    一个事务具有ACID特性,也就是(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),本文主要讲解一下其中的Isolation,也 ...

  8. Codeforces Round #606(B-D)

    Dashboard - Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) - Codeforces ...

  9. 开源IPTV源服务程序使用教程

    Streaming-Media-Server-Pro 前言 我的目标是将程序打造成属于每个人的直播源服务,且对每个人完全开源免费!可作为家庭影院电视.视频等流媒体的提供商,兼容全平台,只需下载视频播放 ...

  10. ERROR: column "xxxxxx" does not exist解决办法

    今天在写PostgreSQL语句时候发现运行这个代码 SELECT t1.equipid, t2.equipname, t1.bigtype, t1.smalltype FROM pdw_gh_pro ...