Mongo散记--聚合(aggregation)& 查询(Query)
2014-08-16 17:21
471 查看
mongo官网:http://www.mongodb.org/
工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。
本篇主要终结记录聚合和查询。
db.view_view.count({_id:"521842"})
db.view_view.find().count()
db.view_view.find({_id:"521842"}).count()
db.view_view.distinct("view") view是个数组,会把每一个数组的元素都distinct一下
关于以上两个group的解释:
key/keyf:要依照进行分组的列,key是直接选取表中的列,kef是一个函数,对列进行一些处理,函数结果要返回一个对象,比方{view_num:doc.view.length},doc.view.length,是表中的数组列view的长度。
cond:是要过滤的查询条件
reduce:处理函数
initial:返回列的初始值
finalize:对reduce的结果进行进一步处理,比方格式化
以上:r_times是我们定义的要返回的列的名称,ip和times是表中的列,mr是我们要把MapReduce的计算结果存入名称为mr的集合中。
mapReduce的原型为:function (map, reduce, optionsOrOutString),以下详细介绍一下函数的三个參数:
map函数,它会遍历集合中的每个文档,this表示文档,它使用emit方法将文档按键分组,并返回须要统计的数据;
reduce函数,它将收集数据并统计,两个參数分别为map函数返回的key值和数据数组;
optionsOrOutString參数为一个对象,定义了一些额外工作,比方上面的列子中使用out參数将统计结果放入到mr集合中,集合不存在则创建,存在了则覆盖。
參数optionsOrOutString对象除了out键以外还有其他一些键:
finalize函数,同group的finalize完毕器一样,能够对reduce的结果做一些处理;
query文档,在map函数前对文档过滤;
sort文档,在map函数前对文档排序,必须先对排序的字段建立索引;
limit整数,在map函数前设定文档数量;
scope文档,js函数中用到的变量,client能够通过scope传递一些值;
jsMode布尔,指定了map和reduce函数间传递的对象使用BSON格式还是javascript对象,默认值false,表示採用BSON格式,长处是中间的BSON数据会被存在硬盘上,所以传递的数据量能够非常大,但会影响性能;採用javascript对象,性能较高,但仅仅能传递50万个不同的key值;
verbos布尔,默认true,显示具体的时间统计信息。
以上能够看出MapReduce的强大,能够非常轻松的实现不同的统计功能。
db.access_logs_140701.find({jxTime:{$gt:1407011300,$lt:1407011400},"curl.sku":"99978033"}).sort({jxTime:-1}).skip(1).limit(100)
db.invoke_stat.find({date:{$gte:ISODate("2014-07-09 10:00:00"),$lt:ISODate("2014-07-09 11:00:00")}})
db.view_view.find({view:{$size:10}}) 查询数组长度为10的,当前Mongo不直接支持数据长度范围查询,比方查询数据长度<10的,仅仅能MapReduce编程实现
工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。
本篇主要终结记录聚合和查询。
聚合(aggregation)
Count
db.view_view.count()db.view_view.count({_id:"521842"})
db.view_view.find().count()
db.view_view.find({_id:"521842"}).count()
Distinct
db.view_view.distinct("_id")db.view_view.distinct("view") view是个数组,会把每一个数组的元素都distinct一下
Group
db.invoke_stat.group({ key:{ip:true}, cond:{ date:{$gte:ISODate("2014-07-09 16:00:00"),$lt:ISODate("2014-07-10 16:00:00")} }, reduce:function(curr,result){ result.count += curr.times; }, initial:{count:0}, finalize:function(result) {result.count = '$' + result.count} }); db.view_view.group({ keyf:function(doc){return {view_num:doc.view.length}}, reduce:function(curr,result){ result.count += 1; result.id = curr._id; }, initial:{count:0} });
关于以上两个group的解释:
key/keyf:要依照进行分组的列,key是直接选取表中的列,kef是一个函数,对列进行一些处理,函数结果要返回一个对象,比方{view_num:doc.view.length},doc.view.length,是表中的数组列view的长度。
cond:是要过滤的查询条件
reduce:处理函数
initial:返回列的初始值
finalize:对reduce的结果进行进一步处理,比方格式化
MapReduce
db.invoke_stat.mapReduce( function(){ var key = this.ip; emit(key,{r_times:this.times}) }, function(key,emits){ total=0; for(var k in emits) { total+=emits[k].r_times; } return {r_times:total} }, {out:'mr'} )
以上:r_times是我们定义的要返回的列的名称,ip和times是表中的列,mr是我们要把MapReduce的计算结果存入名称为mr的集合中。
mapReduce的原型为:function (map, reduce, optionsOrOutString),以下详细介绍一下函数的三个參数:
map函数,它会遍历集合中的每个文档,this表示文档,它使用emit方法将文档按键分组,并返回须要统计的数据;
reduce函数,它将收集数据并统计,两个參数分别为map函数返回的key值和数据数组;
optionsOrOutString參数为一个对象,定义了一些额外工作,比方上面的列子中使用out參数将统计结果放入到mr集合中,集合不存在则创建,存在了则覆盖。
參数optionsOrOutString对象除了out键以外还有其他一些键:
finalize函数,同group的finalize完毕器一样,能够对reduce的结果做一些处理;
query文档,在map函数前对文档过滤;
sort文档,在map函数前对文档排序,必须先对排序的字段建立索引;
limit整数,在map函数前设定文档数量;
scope文档,js函数中用到的变量,client能够通过scope传递一些值;
jsMode布尔,指定了map和reduce函数间传递的对象使用BSON格式还是javascript对象,默认值false,表示採用BSON格式,长处是中间的BSON数据会被存在硬盘上,所以传递的数据量能够非常大,但会影响性能;採用javascript对象,性能较高,但仅仅能传递50万个不同的key值;
verbos布尔,默认true,显示具体的时间统计信息。
以上能够看出MapReduce的强大,能够非常轻松的实现不同的统计功能。
查询(Query)
mongo查询语法:db.access_logs_140701.find({jxTime:{$gt:1407011300,$lt:1407011400},"curl.sku":"99978033"}).sort({jxTime:-1}).skip(1).limit(100)
db.invoke_stat.find({date:{$gte:ISODate("2014-07-09 10:00:00"),$lt:ISODate("2014-07-09 11:00:00")}})
db.view_view.find({view:{$size:10}}) 查询数组长度为10的,当前Mongo不直接支持数据长度范围查询,比方查询数据长度<10的,仅仅能MapReduce编程实现
相关文章推荐
- Mongo散记--安装&聚合(aggregation)& 查询(Query)
- 闪回版本查询和闪回事务查询实例(flashback version query & flashback transaction query)
- 组合与聚合的选用 (Composition & Aggregation)
- mongo 聚合查询
- mongo聚合多条件查询
- 009-elasticsearch【三】示例数据导入、URI查询方式简介、Query DSL简介、查询简述【_source、match、must、should等】、过滤器、聚合
- 深入浅出 Javascript API(五)--Query & Find 查询
- Neo4J 安装&常见语句操作&项目中的集成应用&复杂查询(@Query注解和自定义Match)
- Solr入门之Lucene&Solr临近查询之SpanQuery
- 组合与聚合的选用 (Composition & Aggregation)
- spring data jpa中@Query中的模糊查询<like关键字>
- mongo中的高级查询之聚合操作(distinct,count,group)
- java对mongo的一些去重、分组聚合、分页查询等操作
- mongo分组聚合(sum)在java中的用户:Aggregation agg = newAggregation();
- ASP.NET MVC & EF 构建智能查询 三、解析QueryModel
- mongo的query中包含null怎么查询
- MongoDB学习系列(二)mongo聚合查询实例
- Mongo In Action--查询与聚合
- Mongodb高级查询Aggregation聚合组件分页
- mysql子查询用limit报错( “This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’ ”)