一、$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进行分组操作的更多相关文章

  1. Java对MongoDB进行分组操作并统计各个分组的数量

    最近在检索MongoDB的数据时需要用到分组操作,由于没有现成的说明文档可参考,只能是在代码中不断调试.摸索前进:目前已现实了Java对MongoDB的分组操作,并统计各个分组的数量.现通过示例详细解 ...

  2. MongoDB 的分组操作 In C#

    C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj   h ...

  3. springboot 学习之路 14(整合mongodb的Api操作)

    springboot整合mongodb: mongodb的安装和权限配置  请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...

  4. MongoDB的聚合操作以及与Python的交互

    上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...

  5. mongodb group php 操作

    紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂. 测试数据 > db.fruit.find( ...

  6. MongoDB 的聚集操作

    聚合引言 聚集操作就是出来数据记录并返回计算结果的操作.MongoDB提供了丰富的聚集操作.可以检測和执行数据集上的计算.执行在mongod上的数据聚集简化了代码和资源限制. 像查询一样,在Mongo ...

  7. mongodb的聚合操作

    在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用  聚合框架(aggregation) 来完成.在mongodb ...

  8. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  9. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

随机推荐

  1. MySQL在线更改binlog格式

    今天变更jboss报错如下: SQLWarning ignored: SQL state ', message [Unsafe statement written to the binary log ...

  2. 为你的VPS进行一些安全设置吧

    安全是一个VPS最基本的必备条件,若您的VPS三天两头被人攻破,那么对于网站来说也没什么意义了,所以,在创建了Web服务器之后,您首先要做的事情就是将您的VPS加固,至少让普通黑客没有办法能够攻破您的 ...

  3. 批量监测dns是否可用脚本,不可用时并切换

    #!/usr/bin/env python # coding=utf-8 # hexm@2016-02-14 import time import requests import paramiko i ...

  4. css 中两个class之间没有空格与有空格有什么区别

    第一个匹配: <div class="ul item"></div>:无法匹配:<div class="ul"></d ...

  5. flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询

    一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...

  6. PHP将数据写入指定文件中

    首先创建一个空的txt文件,这里我们创建了一个1.txt的空文件. 第一种方法:fwrite函数 <?php $file=fopen('1.txt','rb+'); var_dump(fwrit ...

  7. 《转》MySQL 5.7版本新特性连载

    MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来 ...

  8. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  9. Maven多模块项目

    1.项目结构-父项目 其中parent是父项目,这个父项目的父项目是springboot,我搭建这个多模块的项目的目的主要是为了研究学习springbatch 父项目的pom文件内容: <pro ...

  10. IEnumerable和IEnumerator接口

    我们先思考几个问题:1.为什么在foreach中不能修改item的值?(IEnumerator的Current为只读)2.要实现foreach需要满足什么条件?(实现IEnumerator接口来实现的 ...