文档章节

Mongodb聚合

晨曦断罪
 晨曦断罪
发布于 2016/12/28 12:47
字数 914
阅读 236
收藏 0

1.集合框架

使用聚合框架可以对集合中的文档进行变换和组合。
通过创建一个管道( pipeline ) 来对遗传的文旦进行处理
这些构件包括筛选( filtering ) 投射(project) 分组(grouping) 排序(sorting) 限制(limit)和跳过(skipping)

2.管道操作符

2.1 $match

用于对文档集合进行筛选,之后就可以在筛选得到的文档子集上做聚合。
在实际用途中,应该尽可能将此操作符放在管道之前用 (查询可以使用索引)

2.2 $project

投射 操作 可以从子文档中提取字段 可以重命名字段 还可以在这些字段上进行一些有意思的操作

db.test.aggregate({“project”:{“author”:1,”id”:0}})
个人理解project可以控制文档横向展示的属性 而match可以挑出符合条件的文档来进行操作 一个针对横向 一个针对纵向

重命名字段

>db.test.aggregate({"$project":{"userid":"$_id""_id": 0}})

可以使用这种技术生成字段的多个副本 尽量在修改字段之前使用索引

可以使用表达式将多个字面量和变量组合在一个值中使用

在聚合框架中有几个表达式可用来组合或者进行人以深度的嵌套以便创建复杂的表达式

1.数学表达式

加法

>db.test.aggregate(
{
        "$project":{
                "totalPay":{
                "$add":["salary","bonus"]
                }
        }
}

使用 subtract进行减法

>db.test.aggregate(
{
        "$project":{
                "totalPay":{
                "subtract":[{$add":["salary","bonus"]},"$401k"] } } }

使用multiply 乘法 使用 divide 除法 结果为商 使用 mod 求余

2.日期表达式

取出日期对象类型的月份

>db.test.aggregate(
{
        "$project":{
                "hireIn":{"$month":"$hireDate"},
                "$subtract":[{"$year":new Date()},"$year":"$hireDate"}]
                }
        }
}

使用week 取出周 使用year 取出年 使用dayOfMonth dayOfWeek dayOfYear hour minute second

3.字符串表达式

生成j.doe@outlook.com格式的email地址

>db.test.aggregate(
{
        "$project":{
                "email":{
                "$concat":[
                    {"$substr":["fiestName",0,1]},
                    ".",
                    "$lastName",
                    "@outlook.com"
                    ]           
                }
        }
}
4.逻辑表达式

$cmp 比较两个对象 相等返回0 大于返回正数 小于返回负数

$strcasecmp 比较两个字符串 区分大小写

”$cond“ :[booleanExpr,trueExpr,falseExpr]
如果boolean值为true,则返回trueExpr

”$ifNull“:[expr,replacementExpr]
如果expr是null 返回replacementExpr,否则返回expr

举个栗子

>db.test.aggregate(
{
        "$project":{
                "grade":{
                    "$cond":[
                        "$teachersPet",//if
                        100,
                        {     //else
                        "$add":[
                            {"$multiply":[.1,"$attendanceAvg"]},
                            {"$multiply":[.3,"$quizzAvg"]},
                            {"$multiply":[.6,"$testAvg"]}
                            ]
                        }
                    }
                }
        }
}
2.3 $group

可以将文档一句特定字段的不同值进行分组

1.分组操作符

允许对每个分组进行计算,得到相应的结果

2.算数操作符

$sum 分组中每出现一个文档 就对计算结果加1

$avg 返回平均值

栗子:

>db.test.aggregate(
{
        "$group":{
                "_id":{"$country"},
                "totalRevenue" : {"$avg":"$revenue"}
                }
        }
}
3.极值操作符

得到数据集合的边缘值

$max

$min

$first

$last

前两个操作符会查看每个文档 若数据无序 可有效工作 若数据有序 可以使用后两个操作符

4.数组操作符

$addToSet : expr
如果当前数组中不包含expr,就将它添加到数组中

$push : expr
不管expr是什么值,都将它添加到数组中 返回包含所有值的数组

分片情况下 group行为会现在每个分片上执行 然后各个分片上的分组结果会被发送到mongos上进行最后的同意分组 剩余的管道工作也都是在mongos(而不是分片)上运行的。

2.4 $unwind

拆分 可以讲数组中的每个值拆分为单独的文档

栗子:

>db.test.aggregate(
{
        "$project":{"comments":$comments}
},
{
        "$unwind": "$comments"
},
{
        "$match":{"comments.author":"Mark"}
},
{
        "$project":{"text":1,"date":0}
})
2.5 $sort

排序 值为1(升序) 值为-1(降序)

2.6 $limit

返回结果集中的前n个结果

2.7 $skip

跳过前n个结果 将剩余文档作为结果返回

© 著作权归作者所有

晨曦断罪
粉丝 0
博文 16
码字总数 12398
作品 0
石家庄
程序员
私信 提问
。W/mongodb-weadmin

Mongodb-WeAdmin 项目介绍 Mongodb网页管理工具,基于Spring Boot2.0,前端采用layerUI实现。 源于线上环境部署mongodb时屏蔽了外网访问mongodb,所以使用不了mongochef这样方便的远程连接工具...

。W
2018/11/22
0
0
MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码 先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroadlee/MongoDBDemo.rar 此项目是用Mav...

Airship
2018/10/22
97
0
MongoDB 4.0 正式发布,支持多文档事务

MongoDB 4.0 已正式发布,MongoDB 是一个开源文档数据库,提供高性能、高可用性和自动扩展。 下载地址:MongoDB Download Center 在 4.0 正式发布之前,我们已经报道了其相关更新信息,此次正...

h4cd
2018/06/29
11.2K
34
mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、等等)

最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网:https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的...

Airship
2018/06/01
167
0
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
2018/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
55分钟前
154
3
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
10
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部