aggregate运用
测试环境:192.168.1.55
mongo 192.168.1.55:30001
show dbs
use gwgps
测试目标,求出两个班的总数,人数,平均分数等。
1. 数据准备
db.person1.insert({'class':1,'name':'n1',age:5,score:90,nation:'汉'})
db.person1.insert({'class':1,'name':'n2',age:6,score:92,nation:'汉'})
db.person1.insert({'class':1,'name':'n3',age:5,score:92,nation:'苗'})
db.person1.insert({'class':1,'name':'n4',age:8,score:96,nation:'藏'})
db.person1.insert({'class':1,'name':'n5',age:8,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n6',age:9,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n7',age:4,score:91,nation:'藏'})
db.person1.insert({'class':1,'name':'n8',age:8,score:96,nation:'苗'})
db.person1.insert({'class':2,'name':'n9',age:9,score:95,nation:'苗'})
db.person1.insert({'class':2,'name':'n10',age:9,score:96,nation:'藏'})
db.person1.insert({'class':2,'name':'n11',age:9,score:92,nation:'苗'})
db.person1.insert({'class':2,'name':'n12',age:8,score:91,nation:'汉'})
db.person1.insert({'class':2,'name':'n13',age:7,score:99,nation:'汉'})
db.person1.insert({'class':2,'name':'n14',age:7,score:98,nation:'汉'})
db.person1.insert({'class':2,'name':'n15',age:2,score:99,nation:'内蒙'})
2. 查询所有人数
(_id:为分组字段,如果不进行分组,则用null,如果有,填写分组字段)
db.person1.aggregate( [ {
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )
结果:{ "_id" : null, "count" : 15 }
3.查询总分
db.person1.aggregate( [ {
$group: {
_id: null,
total: { $sum: "$score" }
}
}
] )
结果:{ "_id" : null, "total" : 1423 }
4.根据班级分组,求出每个班的总分,并对分数进行排序
(注:分组可以一个字段,也可以多个字段)
db.person1.aggregate( [ {
$group: {
_id: "$class",
total: { $sum: "$score" }
}
}, { $sort: { total: 1 } }
] )
结果: { "_id" : 2, "total" : 670 } { "_id" : 1, "total" : 753 }
5.对班级和年龄分组,求出不同班级,年龄层次的总分,并对分数排序
db.person1.aggregate( [ {
$group: {
_id: {
class: "$class",
age:"$age"
},
total: { $sum: "$score" }
}
}
] )
结果: { "_id" : { "class" : 2, "age" : 8 }, "total" : 91 } { "_id" : { "class" : 2, "age" : 2 }, "total" : 99 } { "_id" : { "class" : 1, "age" : 4 }, "total" : 91 } { "_id" : { "class" : 1, "age" : 9 }, "total" : 98 } { "_id" : { "class" : 2, "age" : 9 }, "total" : 283 } { "_id" : { "class" : 1, "age" : 8 }, "total" : 290 } { "_id" : { "class" : 2, "age" : 7 }, "total" : 197 } { "_id" : { "class" : 1, "age" : 6 }, "total" : 92 } { "_id" : { "class" : 1, "age" : 5 }, "total" : 182 }
6.首先按照班级分组,然后求出人数大于7的班级名和学生具体人数
db.person1.aggregate( [ {
$group: {
_id: "$class",
count: { $sum: 1 }
}
}, { $match: { count: { $gt: 7 } } }
] )
结果: { "_id" : 1, "count" : 8 }
7.求出经过过滤某个指定条件(名族:汉)后的结果数据,对结果数据进行分组计算
db.person1.aggregate( [ { $match: { nation: '汉' } }, {
$group: {
_id: "$class",
total: { $sum: "$score" }
}
}
] )
结果: { "_id" : 2, "total" : 288 } { "_id" : 1, "total" : 378 }
注:其他功能待定。
aggregate运用的更多相关文章
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- c# Enumerable中Aggregate和Join的使用
参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...
- MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)
聚合运算之group 语法: db.collection.group( { key:{key1:1,key2:1}, cond:{}, reduce: function(curr,result) { ...
- MongoDB aggregate 运用篇
基础知识 操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的 ...
- 细说Linq之Aggregate
前言 Linq中有关常见的方法我们已经玩的得心应手,而对于那些少用的却是置若罔闻(夸张了点),但只有在实际应用中绞尽脑汁想出的方法还不如内置的Linq方法来的实际和简洁,不喜勿喷,怪我见识短. 通过R ...
- Linq专题之提高编码效率—— 第一篇 Aggregate方法
我们知道linq是一个很古老的东西,大家也知道,自从用了linq,我们的foreach少了很多,但有一个现实就是我们在实际应用中使用到的却是屈指可数 的几个方法,这个系列我会带领大家看遍linq,好的 ...
- MongoDB aggregate 运用篇 个人总结
最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得.. 别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一 ...
- System.Linq.Enumerable 中的方法 Aggregate 函数
语法: public static TSource Aggregate<TSource>( this IEnumerable<TSource> source, Func&l ...
- Mongo集合操作Aggregate
最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得.. 别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一 ...
- 使用aggregate在MongoDB中查找重复的数据记录
我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...
随机推荐
- android 中如何分析内存泄漏
转载:http://blog.csdn.net/fulinwsuafcie/article/details/8363218 前提条件: 1,电脑安装了java 运行环境 2,手机端开启了 USB 调试 ...
- 江哥的dp题a(codevs 4815)
题目描述 Description 给出一个长度为N的序列A(A1,A2,A3,...,AN).现选择K个互不相同的元素,要求: 1.两两元素互不相邻 2.元素值之和最大 输入描述 Input Desc ...
- Vim插件安装
一.常用的插件 sudo apt-get install vim vim-scripts vim-docsudo apt-get install ctagssudo apt-get install v ...
- Visual Studio从此走入非Windows程序猿家
(此文章同时发表在本人微信公众号"dotNET每日精华文章") 在Build 2015大会上,微软放了很多大招,其中一个让普通(不管是微软生态还是非微软生态的)程序猿都密切关注的就 ...
- HTML5小游戏【是男人就下一百层】UI美化版
之前写的小游戏,要么就比较简单,要么就是比较难看,或者人物本身是不会动的. 结合了其它人的经验,研究了一下精灵运动,就写一个简单的小游戏来试一下. 介绍一下几个主要的类: Frame:帧的定义,主要描 ...
- Codeforces Gym 100203G G - Good elements 标记暴力
G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- Android中的.9.png
智能手机中经常有自动横屏的功能,同一幅界面在随着手机(或平板电脑)中的方向传感器会改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化产生拉伸,造成图形的变形.例如下面一个在竖屏时正常显 ...
- Messenger信使
* Messenger用于Activity和Service之间消息传递 需求:activity来绑定服务,绑定成功后,将数据发送给service,service收到消息后,再发送信息给activity ...
- Android 生成和Pull解析xml
一.单个对象生成xml 生成以下xml,该怎么生成呢? <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <accou ...
- hdu 5752 Sqrt Bo
Sqrt Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...