`
sjk2013
  • 浏览: 2166211 次
文章分类
社区版块
存档分类
最新评论

mongodb 聚合函数

 
阅读更多
1.count
这个函数很好理解,和其他数据库一样,就是做一个count操作
select count(*) from tab1 =db.tab1.count()
以上例子很好理解,但是如果在操作中有skip,limit这种操作的话,那么count会忽略掉这些操作,必须加入一个true参数
比如:db.tab1.find().skip(1),limit(2).count()和db.tab1.find().count()得出的结果是一样的
必须修改为db.tab1.find().skip(1).limit(2).count(true)
2.distinct
去重函数,这个也应该很熟悉,各种关系数据库都有
具体操作:db.runCommand({"distinct":"collection","key":"xxxx"})=db.collections.distinct("xxxx");
3.group
selecta,b,sum(c)csumfromcollwhereactive=1group bya,b

db.coll.group( {key: { a:true, b:true },

cond: { active:1 },

reduce:function(obj,prev){prev.csum+=obj.c; },

initial: {csum: 0 }

});

参数解释:

Key:group字段
Reduce:聚合函数,典型的有sumcount操作,包含两个参数,当前遍历对象以及聚合计数器
Initial:初始化计数器值
Cond:查询条件筛选选项,如果是空,那么默认对当前collection的所有行操作
Group不能在sharding中使用,结果输出不能多于10000keys
举例:

> db.mtb1.find()
{ "_id" : ObjectId("4fb4be52aa814943b788095c"), "name" : "aaa", "score" : 77 }
{ "_id" : ObjectId("4fb4be5caa814943b788095d"), "name" : "bbb", "score" : 79 }
{ "_id" : ObjectId("4fb4be61aa814943b788095e"), "name" : "ccc", "score" : 79 }
{ "_id" : ObjectId("4fb4be69aa814943b788095f"), "name" : "ddd", "score" : 79 }
{ "_id" : ObjectId("4fb4be74aa814943b7880960"), "name" : "eee", "score" : 100 }
{ "_id" : ObjectId("4fb4be7aaa814943b7880961"), "name" : "fff", "score" : 100 }
{ "_id" : ObjectId("4fb4be82aa814943b7880962"), "name" : "ggg", "score" : 100 }
{ "_id" : ObjectId("4fb4be9eaa814943b7880963"), "name" : "hhh", "score" : 200}

> db.mtb1.group(
... {key:{score:true},
... reduce:function(obj,prev){prev.count++;},
... initial:{count:0}
... });
[
{
"score" : 77,
"count" : 1
},
{
"score" : 79,
"count" : 3
},
{
"score" : 100,
"count" : 3
},
{
"score" : 200,
"count" : 1
}
]
一个简单的例子,应该很明白了。其实这里group还是建立在reduce上面
4.map/reduce
这个工具的功能可以实现以上三种任何一种,它是分两步完成,先做map,再reduce,map首先对数据进行分解映射,map执行完,紧接着会进行reduce,map后会的到key-values,像{key:[value1,value2,value3...]},然后通过reduce处理后得到key-value,也就是单一的值。
语法:
db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>
[, query : <query filter object>]
[, sort : <sort the query. useful for optimization>]
[, limit : <number of objects to return from collection>]
[, out : <output-collection name>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <object where fields go into javascript global scope >]
[, verbose : true]
}
);

query是很常用的,它用来在map阶段过滤查询条件的以限定MapReduce操作的记录范围,sortlimit集合query使用。

out指定输出结果的collections名称

Keeptemp布尔型,默认是false,如果是true那么生成的collection是永久存在的,如果是false,那么在客户端连接关闭后,会自动删除生成的collection

Finalize一般用来计算平均数,裁剪数组,清多余信息

query是很常用的,它用来在map阶段过滤查询条件的以限定MapReduce操作的记录范围,sortlimit集合query使用。

out指定输出结果的collections名称

Keeptemp布尔型,默认是false,如果是true那么生成的collection是永久存在的,如果是false,那么在客户端连接关闭后,会自动删除生成的collection

Finalize一般用来计算平均数,裁剪数组,清多余信息

{ result : <collection_name>,

counts : {

input : <number of objects scanned>,

emit : <number of times emit was called>,

output : <number of items in output collection>

} ,

timeMillis : <job_time>,

ok : <1_if_ok>,

[, err : <errmsg_if_error>]

}

result:储存结果的collection的名字

input:满足条件的数据行数

emit:emit调用次数,也就是所有集合中的数据总量

ouput:返回结果条数

timeMillis:执行时间,毫秒为单位

ok:是否成功,成功为1

err:如果失败,这里可以有失败原因


给出官方文档的一个例子:

$ ./mongo

> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );

> db.things.insert( { _id : 2, tags : ['cat'] } );

> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );

> db.things.insert( { _id : 4, tags : [] } );


> // map function

> m = function(){

... this.tags.forEach(

... function(z){

... emit( z , { count : 1 } );

... }

... );

...};


> // reduce function

> r = function( key , values ){

... var total = 0;

... for ( var i=0; i<values.length; i++ )

... total += values[i].count;

... return { count : total };

...};


> res = db.things.mapReduce(m,r);

> res

{"timeMillis.emit" : 9 , "result" : "mr.things.1254430454.3" ,

"numObjects" : 4 , "timeMillis" : 9 , "errmsg" : "" , "ok" : 0}


> db[res.result].find()

{"_id" : "cat" , "value" : {"count" : 3}}

{"_id" : "dog" , "value" : {"count" : 2}}

{"_id" : "mouse" , "value" : {"count" : 1}}


> db[res.result].drop()

分享到:
评论

相关推荐

    mongoDB中聚合函数java处理示例详解

    主要给大家介绍了关于mongoDB中聚合函数java处理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Mongodb聚合函数count、distinct、group如何实现数据聚合操作

    Mongodb中自带的基本聚合函数有三种:count、distinct和group。下面我们分别来讲述一下这三个基本聚合函数。 (1)count 作用:简单统计集合中符合某种条件的文档数量。 使用方式:db.collection.count

    Mongodb聚合

    Mongodb聚合 mongodb的聚合函数使用方法

    MongoDB简单聚合函数.pdf

    MongoDB简单聚合函数.pdf 学习资料 复习资料 教学资源

    课时8:MongoDB数据库安全机制.mp4

    MongoDB数据库

    MongoDB查询练习题及答案

    NoSQL数据库之MongoDB查询

    fitness-witness:跟踪锻炼和进度的应用程序

    重要提示:考虑使用MongoDB聚合函数动态地累加并返回每次锻炼的总持续时间。 查看的的以及的以了解如何实现。 要将具有MongoDB数据库的应用程序部署到Heroku,您需要设置一个MongoDB Atlas帐户并将数据库从那里连接...

    workout-tracker

    重要提示:考虑使用MongoDB聚合函数动态地累加并返回每次锻炼的总持续时间。 查看的的以及的以了解如何实现。 要将具有MongoDB数据库的应用程序部署到Heroku,您需要设置一个MongoDB Atlas帐户并将数据库从那里连接...

    MongoDB聚合功能浅析

    MongoDB数据库功能强大!除了基本的查询功能之外,还提供了强大的聚合功能。这里简单介绍一下count、distinct和group。 1.count:   --在空集合中,count返回的数量为0。 &gt; db.test.count() 0 --测试插入一个...

    在MongoDB中实现聚合函数

    随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据。传统方法存储和处理数据的成本将会随着数据量增长而显著增加。这使得很多组织都在寻找一种经济的解决方案...

    mongo-round:使用 MongoDB 聚合框架时。 此辅助函数可帮助您对数字进行四舍五入

    mongo-round 使用时执行数字舍入的辅助函数。 npm install mongo-round用法 var round = require ( 'mongo-round' ) ; 零小数位: db . myCollection . aggregate ( [{ $project : {roundValue : round ( '$value' )...

    Workout-Tracker

    锻炼追踪器 对于此任务,您将创建一个锻炼追踪器。 在Develop文件夹中已经为您提供了前端代码。 此分配将要求您使用Mongoose模式创建Mongo数据库,并使用Express处理路由。... 重要提示:考虑使用MongoDB聚合函数

    锻炼追踪器

    锻炼追踪器 对于此任务,您将创建一个锻炼追踪器。 在Develop文件夹中已经为您提供了前端代码。... 重要提示:研究使用MongoDB聚合函数动态加总并返回每次锻炼的总持续时间。 请查看$ addFields上的M

    健身追踪器

    第17单元NoSQL作业:锻炼跟踪器对于这个项目,我创建了一个运动追踪器。 该项目要求用户使用Mongoose模式创建Mongo数据库,并使用Express处理路由... 重要提示:研究使用MongoDB聚合函数动态加总并返回每次锻炼的总持续

    mongodb-win32-x86_64-2008plus-ssl-v3.4-latest-signed.msi

    Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。 Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。 Map函数和Reduce函数是使用Javascript...

    MongoDB权威指南(中文版)高清

    755.5 地理空间索引 765.5.1 复合地理空间索引 785.5.2 地球不是二维平面 78第6章 聚合 796.1 count 796.2 distinct 796.3 group 806.3.1 使用完成器 826.3.2 将函数做为键使用 846.4 MapReduce...

    Mongodb中MapReduce实现数据聚合方法详解

    (1)简单的用户聚合函数; (2)使用aggregate进行统计; (3)使用mapReduce进行统计; 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明。 MapReduce是啥呢?以我的理解,其实...

Global site tag (gtag.js) - Google Analytics