7.MongoDB系列之聚合框架
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系列之聚合框架的更多相关文章
- MongoDB系列六(聚合).
一.概念 使用聚合框架可以对集合中的文档进行变换和组合.基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理.这些构件包括筛选(filtering).投射(project ...
- mongodb的高级操作(聚合框架)
group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍 参考 官网:http://docs.mongodb.org/ma ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- 在MongoDB中实现聚合函数 (转)
随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...
- MongoDB的aggregate聚合
聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档.(显示的列,相当遇sql 的) $match:用于过滤数据,只输出符 ...
- 在MongoDB中实现聚合函数
在MongoDB中实现聚合函数 随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加. ...
- MongoDB中的聚合操作
根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...
- 005.MongoDB索引及聚合
一 MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处 ...
- Sql Server来龙去脉系列之二 框架和配置
本节主要讲维持数据的元数据,以及数据库框架结构.内存管理.系统配置等.这些技术点在我们使用数据库时很少接触到,但如果要深入学习Sql Server这一章节也是不得不看.本人能力有限不能把所有核心的知识 ...
随机推荐
- Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_196 Python自动化,大概也许或者是今年最具热度的话题之一了.七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那 ...
- 使用 DolphinScheduler 调度 Kylin 构建
本文章经授权转载 Apache Kylin 上游通常有复杂的数据 ETL 过程,如 Hive 入库.数据清洗等:下游有报表刷新,邮件分发等.集成 Apache DolphinScheduler 后,K ...
- 我写的蓝宝石留言本php版 v4.5
蓝宝石留言本php版v4.5采用原生php编写,在php5.6~php7.x下调试通过.本留言本使用了utf-8编码. include/config1.php是数据库连接参数的配置文件, includ ...
- CF1442D Sum (动态规划,线段树分治)
( 宋 体 字 看 起 来 真 舒 服 ) _{_{(宋体字看起来真舒服)}} (宋体字看起来真舒服) 题 面 ( 洛 谷 翻 译 ) 题面_{_{(洛谷翻译)}} 题面(洛谷翻译) 给定 n ...
- windows如何禁止更新
注意!本方法针对windows专业版本 家庭版本可以直接下载一个windows update blocker软件 windows+r快捷键输入代码如下图 gpedit.msc 进入后需要的路径如下 第 ...
- 不想当Window的Dialog不是一个好Modal,弹窗翻身记
弹窗是我们熟视无睹的一种交互方式,经常用到,但从没好好想过这种交互行为背后的意义... 弹窗是Windows的灵魂 Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候 ...
- KingbaseES Truncate 与 Delete 机制比较
使用过Oracle的都知道,Truncate操作由于不需要写redo日志,因此,在性能上会比delete操作更高效,但在实际使用过程中,有时会发现delete比truncate速度更快.以下介绍下二者 ...
- 理解 KingbaseES 中的递归查询
关键字:SQL,CTE,递归查询 概述:通常递归查询是一个有难度的话题,尽管如此,它们仍使您能够完成在 SQL 中无法实现的操作.本文通过示例进行了简单介绍,并展示了与 PL/SQL的递归查询实现的差 ...
- Group 和 Distinct 列的次序影响查询性能
目录 一.概述 二.work_mem 满足排序情况 1.Distinct 语句 2.Group by 语句 三.work_mem 不满足排序情况 1.Distinct 语句 2.Group by 语句 ...
- 手把手教你君正X2000开发板的OpenHarmony环境搭建
摘要:本文主要介绍基于君正X2000开发板的OpenHarmony环境搭建以及简单介绍网络配置情况 本文分享自华为云社区<君正X2000开发板的OpenHarmony环境搭建>,作者: 星 ...