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操作包括创建.读取.更新和删 ...
随机推荐
- linux内核capable源代码分析【转】
转自:https://blog.csdn.net/sanwenyublog/article/details/50856849 linux内核里对于进程的权限管理有一个很重要的函数capable,以前看 ...
- robotium之无name、ID仅有desc定位
场景如图: 没有name和ID,群里问了,也没人搭理我,自己试验了下,发现这个法子可用,直接贴代码: Activity act = solo.getCurrentActivity(); int ide ...
- [转]安装ambari
一.准备工作: 基本工具 yumrpmscpcurlwgetpdsh前几个一般系统都自带了,pdsh需要自己装 yum install pdsh 2.配置hosts vim /etc/hosts 10 ...
- CCF2014123集合竞价(C语言版)
问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s 表示一个 ...
- js----DOM对象(3
表格示例(取消,全选,反选): <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Java列表、数组、字符串
列表(list) list中添加,获取,删除元素 添加方法是:.add(e): 获取方法是:.get(index): 删除方法是:.remove(index), 按照索引删除: .remove(Obj ...
- poj 2031 给出每个结点的3维坐标 以及结点的半径 (MST)
3维空间中有N个圆球,给出x y z 以及圆球的半径 ,求最小生成树 边的权值为两个圆球间的距离 如果圆球相互接触 则权值为0 求最小的权值和 Sample Input 3 //n10.000 10. ...
- python 线程间通信之Condition, Queue
Event 和 Condition 是threading模块原生提供的模块,原理简单,功能单一,它能发送 True 和 False 的指令,所以只能适用于某些简单的场景中. 而Queue则是比较高级的 ...
- 开始写博客,学习Linq(3)
为什么需要Linq?(摘自原文) 读者会发现LINQ着眼于解决编程语言和数据库之间广发存在的不统一问题. 1.常见的问题,使用.NET Framework Class Library(FCL)提供了A ...
- 利用mysqldump 实现每天备份方案
1.创建单独的导出导入数据库帐号 grant SELECT, RELOAD, SHOW DATABASES, LOCK TABLES on game to jackluo@localhost iden ...