MongoDB聚合操作

1、count:查询记录条数

db.user.count()

它也跟find一样可以有条件的

db.user.count({"age":22})

2、distinct:用来找出给定键的所有不同的值

db.user.distinct("num")

3、Group:分组查询

key:用来分组文档的字段,我们这里是对年龄分组

initial: 每组都分享一个”初始化函数“

$reduce: 执行的reduce函数,第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象,有多少个文档, $reduce就会调用多少次

db.user.group({
"key":{"age":true},
"initial":{"person":[]},
"$reduce":function(cur,prev){
    prev.person.push(cur.name);
}
})

如果想再过滤掉age小于20的人,group有这么两个可选参数: condition 和 finalize

condition:执行过滤的条件

finalize:在reduce执行完成,结果集返回之前对结果集最终执行的函数。

db.user.group({
"key":{"age":true},
"initial":{"person":[]},
"$reduce":function(doc,out){
    out.person.push(doc.name);
},
"finalize":function(out){
out.count=out.person.length;
},
"condition":{"age":{$lt:20}}
})

4、MapReduce:

MongoDB中的MapReduce相当于关系数据库中的group by。

参数:

map函数:这个称为映射函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。

reduce函数:这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是emit中的key,vlaue为emit分组后的emit(value)的集合,。

mapReduce函数:这个就是最后执行的函数,参数为map,reduce和一些可选参数。

示例:

map函数,对age大于10的进行处理:

var m=function(){
    if(this.age>10){
    emit(this.age,{name:this.name});
    }
}

reduce函数:

var r=function(key,values){
 var count=0;
 values.forEach(function(){count+=1;});
 return count;
}

执行:

db.user.mapReduce(m,r,{"out":"collection"})

查看输出集合“collecton”的情况

db.collection.find()

从结果集也可以看出,临时结果集中的_id是emit函数中的key。

从图中我们可以看到如下信息:

result: "存放的集合名“。

input:传入文档的个数。

emit:此函数被调用的次数。

reduce:此函数被调用的次数。

output:最后返回文档的个数。

时间: 2024-10-16 12:48:35

MongoDB聚合操作的相关文章

Mongodb聚合操作之读书笔记

Mongodb聚合操作 读书笔记 mongodb,两种计算聚合pipeline和mapreduce pipeline查询速度快于mapreduce,但MapReduce能够在多台Server上并行执行复杂的聚合逻辑. mongodb不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么mongodb直接停止操作,并向客户端输出错误消息. Pipeline方式使用db.collection.aggregate()函数进行聚合运算,运算速度较快,操作简单.

mongodb 聚合操作

1.首先举例分析下 mongodb 的聚合操作: 该操作表示根据whoisserver_id 字段分组 来统计每个分组下的 count数量: db.anhui.aggregate({$group:{_id:'$whoisserver_id',total:{$sum:1}}}) 查询出来的结果如下: 如果查询总的数量: db.anhui.aggregate({$group:{_id:null,total:{$sum:1}}}) 以下查询先根据条件过滤然后统计 db.anhui.aggregate(

MongoDB 聚合操作(转)

在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑.MongoDB不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么MongoDB直接停止操作,并向客户端输出错误消息. 一,使用 Pipeline 方式计算聚合 Pipeline 方式使用db.collection.aggregate()函

MongoDB聚合操作 (group, aggregate, mapReduce操作)

#MongoDb 聚合方法 group aggrate mapreduce# 1. Group (不支持分片,分布计算) * 语法结构 <pre> db.collection.group({ key:{category:1}, // 根据category来分类 cond:{shop_price:{$gt:20}}, // 附加条件商品借个大于20的商品 reduce:function(curr, result){ // curr 标识一行记录, result自定义变量, }, initial:

mongoDB与sql聚合操作对应图

SQL Terms, Functions, and Concepts MongoDB Aggregation Operators WHERE $match GROUP BY $group HAVING $match SELECT $project ORDER BY $sort LIMIT $limit SUM() $sum COUNT() $sum join No direct corresponding operator; however, the $unwindoperator allows

MongoDB中的聚合操作

根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.max.min),就需要通过mapReduce来实现了. 在MongoDB2.2版本以后,引入了新的聚合框架(聚合管道,aggregation pipeline ,使用aggregate命令),是一种基于管道概念的数据聚合操作. Name Description count Counts the num

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

上篇博文讲述了排序规则collations的操作和设置方式.顺带介绍了一部分聚合aggregation的设置方式.本文继续介绍聚合操作. 聚合框架的操作处理完数据记录后在返回计算结果.集合操作将来源于多个文档的值归类到一起,这样就可疑在被归类的数据上进行多种操作,然后返回一个单独的结果 1 聚合管道 聚合管道是用于数据聚合的一个框架,是以数据处理管道概念为原型.将文档输入一个多级管道后,可疑将文档转换为聚合的结果.下面以restaurants作为数据集,通过将餐馆类归类,我们就可以使用聚合管道在

基于Morphia实现MongoDB按小时、按天聚合操作

MongoDB按照天数或小时聚合 需求 最近接到需求,需要对用户账户下的设备状态,分别按照天以及小时进行聚合,以此为基础绘制设备状态趋势图. 实现思路是启动定时任务,对各用户的设备状态数据分别按照小时以及天进行聚合,并存储进数据库中供用户后续查询. 涉及到的技术栈分别为:Spring Boot,MongoDB,Morphia. 数据模型 @Data @Builder @Entity(value = "rawDevStatus", noClassnameStored = true) //

基于 MongoDB 动态字段设计的探索 (二) 聚合操作

业务需求及设计见前文:基于 MongoDB 动态字段设计的探索 根据专业计算各科平均分 (总分.最高分.最低分) public Object avg(String major){ Aggregation aggregation = Aggregation.newAggregation( Aggregation.unwind("courseList"), Aggregation.match(Criteria.where("major").is(major)), Agg