打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
《MongoDB高手课》学习记录(第四天)

第四天

今天要学习的是《08 | 聚合查询》,这一节主要是理论的内容,后面的一节是演练。

聚合框架

MongoDB的聚合框架,可以处理进行类似于SQL的group,left outer join之类的运算,只不过可以来控制执行的顺序。
适应的范围目前看优势还是在分析(OLAP),当然OLTP也支持

基本格式

常规的用法是生成一个数组(Pipeline),然后在Pipeline里写处理的步骤(Stage),最后在表(Collection)上调用arrgegate来进行运算。

## 这个是伪代码pipeline = [$stage1, $stage2, ... $stageN];db.<COLLECTION>.aggregate(    pipline,    { options });

与MySQL的对比

与SQL运算符的比较

步骤作用SQL
$match过滤where
$project投影as
$sort排序order by
$group分组group by
$skip/$limit结果限制skip/limit
$lookup左外连接left outer join

步骤中运算符

$match,过滤

$eq/$gt/$lt/$gte/$lte
$and/$or/$not/$in
$geoWithin/$intersect


$project,选择字段

$map/$reduce/$filter
$range
$multiply/$divide/$substract/$add
$year/$month/$dayOfMonth/$hour/$minute/$second


$group,分组

$sum/$avg
$push/$addToSet
$first/$last/$max/$min


特有的步骤,SQL里没有对应的

步骤作用
$unwind展开数组
$graphLookup图搜索
$facet/$bucket分面搜索

例子1

SQL

SELECT  first_name as '名',  last_name as '姓'FROM usersWHERE gender = '男'SKIP 100LIMIT 20

MQL

db.users.aggregate([  { $match: { gender: '男' } },  { $skip: 100 },  { $limit: 20 },  { $project:     {      '名': '$first_name',      '姓': '$last_name'    }  }]);

例子2

SQL

select  department,  count(null) as emp_qtyfrom  userswhere  gender = '女'group by  departmenthaving  count(*) < 10

MQL

db.users.aggregate([  { $match: { 'gender' : '女' }},  { $group: {      _id: '$department'      emp_qty: { $sum: 1 }  }},  { $match: { emp_qty: { $lt: 10 }}}])

例子3 $unwind

说白了就是将文档的树型结构展开成行的结构

文档

> db.students.findOne(){  name: '张三',  score: [    { subject: '语文', score: 84 },    { subject: '数学', score: 90 },    { subject: '外语', score: 69 }  ]}

展开成行

db.students.aggregate([$unwind: '$score'}]){ name: '张三', score: {subject: '语文', score: 84 }}{ name: '张三', score: {subject: '数学', score: 90 }}{ name: '张三', score: {subject: '外语', score: 69 }}

$bucket,就是针对一个数据,按区间来统计

db.products.aggregate([{  $bucket: {    groupBy: '$price',    boundaries: [0, 10, 20, 30, 40],    default: 'Other',    output: { 'count': { $sum: 1 }}  }}])

$facet,还是按区间统计,但可针对多个数据分别统计

db.products.aggregate([{  $facet: {    price: {      $bucket: {...}    },    year: {      $bucket: {...}    }  }}])

最后

今天的状态不太好哈,简单过一个基础知识,明天操练起来

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MongoDB - 增删改查及聚合操作
MongoDB 聚合 | 菜鸟教程
协助报表开发之 MongoDB join mysql
精通Apache Flink读书笔记
“深挖”Spark2.0
零基础Python数据库怎么学?大牛带你扬帆起航
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服