mongoDB进行分组操作
一、$group 进行分组
1、每个职位的雇员人数:
db.getCollection('emp').aggregate(
[
{'$group':{
‘_id’:'$job',
job_count:{'$sum':1}
}
}
]
)
2、每个职位的总工资
db.getCollection('emp').aggregate(
[
{'$group':{
‘_id’:'$job',
job_salaryt:{'$sum':'$salary'}
}
}
]
)
3、每个职位的平均工资
db.getCollection('emp').aggregate(
[
{'$group':{
‘_id’:'$job',
job_salaryt:{'$sum':'$salary'},
job_salary_avg:{'$avg':'$salary'}
}
}
]
)
4、每种职位的最高与最低工资
db.getCollection('emp').aggregate(
[
{'$group':{
‘_id’:'$job',
max_salaryt:{'$max':'$salary'},
min_salary:{'$min':'$salary'}
}
}
]
)
5、每个职位的工资
db.getCollection('emp').aggregate(
[
{
‘$group’:{
'_id':'$job',
'salary_data':{'$push':'$salary'}
}
}
]
)
6、每个职位的人员
db.getCollection('emp').aggregate(
[
{
‘$group’:{
'_id':'$job',
'position_name':{'$addToSet':'$name'} //addToSet,如果有重复的人名,保留一个
}
}
]
)
二、$project 进行数据的规则显示
1、别名
db.getCollection('emp').aggregate(
[
{'$project':{
'_id':0
'职位':'$job',
'name':1
}
}
]
)
2、年薪
db.getCollection('emp').aggregate(
[
{
'$project':{
'name':1,
'salary':{'年薪':{'$multiply':['$salary',12]}}
}
}
]
)
3.判断职位,返回-1 或0
db.getCollection('emp').aggregate(
[
{'$project':{
'_id':0,
'name':1,
'职位':'$job',
'job':{'$strcasecmp':['$job','manager']}
}
}
]
)
三、$macth、$group、$project综合操作
db.getCollection('emp').aggregate(
[
{ $match:{
salary:{
{'$gte':1000,'$lte':30000}
}
}
},
{
$project:{
{ '_id':1,
'name':1,
'salary':1,
'job':1
}
}
},
{
$group:{
{'_id':'$job','count':{'$sum':1},'avg':{'$avg':'$salary'}}
}
},
{sort:{'count':-1}}
]
)
四、$add ,$sum,$group,$sum,$match,$substr
db.photo.aggregate([{
$match: {
siteId: {
$in: datas.parks
},
'shootOn': {
$gte: minT,
$lte: maxT
}
}
}, {
$project: {
siteId: 1,
shootOn: 1,
locationId: 1,
saleNum: {
$size: '$orderHistory'
}
}
}, {
$group: {
_id: {
year: {
$year: {
$add: ['$shootOn', 28800000]
}
},
month: {
$month: {
$add: ['$shootOn', 28800000]
}
},
day: {
$dayOfMonth: {
$add: ['$shootOn', 28800000]
}
},
location: '$locationId'
},
count: {
$sum: '$saleNum'
}
}
}, {
$project: {
_id: 0,
locationId: '$_id.location',
saleInfo: {
day: {
'$concat': [{
$substr: ['$_id.year', 0, 4]
}, '/', {
$substr: ['$_id.month', 0, 2]
}, '/', {
$substr: ['$_id.day', 0, 2]
}]
},
count: '$count',
}
}
}, {
$group: {
_id: '$locationId',
saleInfo: {
$addToSet: '$saleInfo'
}
}
}])
db.order.aggregate([{
$match: {
siteId: {
$in: parks
},
'payInfo.payTime': {
$gte: minT,
$lte: maxT
},
'orderStatus.status':5
}
}, {
$group: {
_id: {
year: {
$year: {
$add: ['$payInfo.payTime', 28800000]
}
},
month: {
$month: {
$add: ['$payInfo.payTime', 28800000]
}
},
day: {
$dayOfMonth: {
$add: ['$payInfo.payTime', 28800000]
}
},
siteId: '$siteId'
},
count: {
$sum: 1
},
sales: {
$sum: '$charge'
}
}
}, {
$project: {
_id: 0,
count: '$count',
sales: '$sales',
siteId: '$_id.siteId',
day: {
'$concat': [{
$substr: ['$_id.year', 0, 4]
}, '/', {
$substr: ['$_id.month', 0, 2]
}, '/', {
$substr: ['$_id.day', 0, 2]
}]
}
}
}])
mongoDB进行分组操作的更多相关文章
- Java对MongoDB进行分组操作并统计各个分组的数量
最近在检索MongoDB的数据时需要用到分组操作,由于没有现成的说明文档可参考,只能是在代码中不断调试.摸索前进:目前已现实了Java对MongoDB的分组操作,并统计各个分组的数量.现通过示例详细解 ...
- MongoDB 的分组操作 In C#
C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj h ...
- springboot 学习之路 14(整合mongodb的Api操作)
springboot整合mongodb: mongodb的安装和权限配置 请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...
- MongoDB的聚合操作以及与Python的交互
上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...
- mongodb group php 操作
紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂. 测试数据 > db.fruit.find( ...
- MongoDB 的聚集操作
聚合引言 聚集操作就是出来数据记录并返回计算结果的操作.MongoDB提供了丰富的聚集操作.可以检測和执行数据集上的计算.执行在mongod上的数据聚集简化了代码和资源限制. 像查询一样,在Mongo ...
- mongodb的聚合操作
在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用 聚合框架(aggregation) 来完成.在mongodb ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
随机推荐
- 调用链系列三、基于zipkin调用链封装starter实现springmvc、dubbo、restTemplate等实现全链路跟踪
一.实现思路 1.过滤器实现思路 所有调用链数据都通过过滤器实现埋点并收集.同一条链共享一个traceId.每个节点有唯一的spanId. 2.共享传递方式 1.rpc调用:通过隐式传参.dubbo有 ...
- oracle数据库自增主键重复
select max(t.id) from T_PLAT_ENUM_VALUE tdrop sequence T_PLAT_ENUM_VALUE;create sequence T_PLAT_ENUM ...
- eclipse引入系统类库
引入系统类库1.第一步:项目,右键,build path,remove报错的类库 2.第二步:项目,右键,build path→Add Library→JRE System Library,Next3 ...
- IE中window的模态框与返回值
window.returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模态窗口时,用于返回窗 ...
- Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业
利用并查集进行处理,定义一个维护数组components,components[i]表示变量序号为i的变量所处的集合,首先处理相等的变量,把它们放入同一个集合中,最后再处理不相等变量,若两个不相等的变 ...
- 详解Android属性动画
前面我们讲到的属性动画都是使用代码的定义方式:Android属性动画之ValueAnimator和Android属性动画之ObjectAnimator和AnimatorSet,下面我们再来看看使用XM ...
- python之比较is与==(转载)
在 Python 中会用到对象之间比较,可以用 ==,也可以用 is .但是它们的区别是什么呢? is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同.莱布尼茨说过: ...
- web----粘包
一.什么是粘包 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的. 须知:只有TCP有粘包现象,UDP永远不会粘包 粘包不一定会发生 如果发生了:1.可能是在 ...
- Codeforces 519D A and B and Interesting Substrings(二维map+前缀和)
题目链接:http://codeforces.com/problemset/problem/519/D 题目大意:给你一串字符串s仅由小写字母组成,并且对于'a'~'z'都给了一个值.求子串t满足t的 ...
- bzoj1036点权模板题
/* HYSBZ1036 树上有1-n个结点,每个节点都有一个权值w 操作 CHANGE u t:把结点u的权值改为t QMAX u v:询问从点u到v的路径上的节点的最大权值 QSUM u v:询问 ...