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 }

注:其他功能待定。

时间: 2024-11-06 02:58:14

aggregate运用的相关文章

mongodb aggregate and mapReduce

Aggregate MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 语法如下: db.collection.aggregate() db.collection.aggregate(pipeline,options) db.runCommand({ aggregate: "<collection>", pipeline: [ <stage>, <...&g

cacti系列之图形合并插件aggregate(二)

资源的需求是随着业务的发展逐步增加的,而在网络规范之初,为了节省资金,我们只会在IDC申请少量的机柜:随着业务扩张,需求增加,老区域可能没有空闲的机柜资源了,只能在机房临近的区域申请机柜,这样就会存在多个外网上行端口.为了方便流量的直观监控,我们就需要把多个外网上行口流量进行合并. 今天我们就来看看怎样实现流量合并. 一.下载并安裝aggregate插件: # 下载aggregate插件并解压至cacit安装目录下的plugins目录. [[email protected]_6.213 ~] w

Aggregate

LINQ provides several aggregation extension methods: Aggregate, Average, Count, LongCount, Max, Min and Sum. The aggregation methods all take a list of objects and reduces that list to a single result. Conceptually it helps to think of Aggregate as a

MongoDB University 第五周作业——aggregate聚合高级查询

HOMEWORK: HOMEWORK 5.2 (HANDS ON) Crunching the Zipcode datasetPlease calculate the average population of cities in California (abbreviation CA) and New York (NY) (taken together) with populations over 25,000. For this problem, assume that a city nam

使用aggregate在MongoDB中查找重复的数据记录

我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我们无法保证每一次的数据库save操作都是原子型的.也就是说,如果客户端连续两次发起同一事件将数据存入数据库,很可能会导致数据被重复保存.高并发的情况下,哪怕是你在代码中已经做了非常严格的校验,例如插入数据前判断要保存的数据是否已经存在,但仍然有可能会出现数据被重复保存的风险.因为在异步执行中,你没有

04 LINQ中的聚合函数(Aggregate function in LINQ)

试想一下,我们有一个List<int>数组,现在我们想对List中的所有值求和.在没学习LINQ之前我们会轻松的写出下面的代码: static void Main(string[] args) { List<int> array = new List<int>() { 1, 3, 3, 2, 7, 3, 2, 8, 5, 4, 6 }; int sum = 0; foreach (int item in array) { sum += item; } Console.W

MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)

聚合运算之group 语法: db.collection.group( { key:{key1:1,key2:1}, cond:{}, reduce: function(curr,result) { }, initial:{}, finalize:function() { } } ) key: 分组字段 cond:查询条件 reduce:聚合函数 initial:初始化 finalize:统计一组后的回调函数 #查询每个栏目下的商品数量 db.goods.group( { key:{cat_id

MongoDB Aggregate

1. sum { "_id" : ObjectId("50b1aa983b3d0043b51b2c52"), "name" : "Nexus 7", "category" : "Tablets", "manufacturer" : "Google", "price" : 199 } select manufacturer,cou

The Aggregate Magic Algorithms

http://aggregate.org/MAGIC/ The Aggregate Magic Algorithms There are lots of people and places that create and collect algorithms of all types (here are a few WWW sites). Unfortunately, in building systems hardware and software, we in The Aggregate o

细说Linq之Aggregate

前言 Linq中有关常见的方法我们已经玩的得心应手,而对于那些少用的却是置若罔闻(夸张了点),但只有在实际应用中绞尽脑汁想出的方法还不如内置的Linq方法来的实际和简洁 之前在Ruby中演示了一段代码来讲述Ruby的神奇,下面我们再来看一下: sum = 0 i = 0 (1..101).each do|elem|   sum+=i   i+=1end puts sum 是的就是这段代码,求1到100的和,代码的优美和简洁让我惊叹. 通过C#继续引入话题 如果你是有两年工作经验以上的人,当在面试