宋体生成mongodb 聚合函数

最近研究宋体生成,稍微总结一下,以后继续补充:

    

select a,b,sum(c) csum from coll where active=1 group by a,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 :合聚函数,典范的有 sum count 操纵,含包两个数参,以后遍历对象以及合聚计数器

    

Initial :初始化计数器值

    

Cond :查询件条筛选选项,如果是空,那么默许对以后 collection 的全部行操纵

    

Group 不能在 sharding 中用使 , 结果出输不能多于 10000 keys

    

举例:

    

> 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()

文章结束给大家分享下程序员的一些笑话语录: 程序语言综述
CLIPPER 程序员不去真的猎捕大象,他们只是购买大象部分的库然后花几年的时间试图综合它们。
DBASE 程序员只在夜间猎捕大象,因为那时没人会注意到他们还在使用石弓。
FOXPRO 程序员开始使用更新更好的步枪,这使他们花掉比实际狩猎更多的时间学习新的射击技术。
C 程序员拒绝直接购买步枪,宁可带着钢管和一个移动式机器车间到非洲,意欲从零开始造一枝完美的步枪。
PARADOX 程序员去非洲时带着好莱坞关于猎捕大象的电影剧本,他们认为照剧本行事就会逮到一头大象。
ACCESS 程序员在没有任何猎象经验的经验下就出发了,他们穿着华丽的猎装、带着全部装备,用漂亮的望远镜找到了大象,然后发觉忘了带扳机。
RBASE 程序员比大象还要稀少,事实上,如果一头大象看到了一个RBASE程序员,对他是个幸运日。
VISUAL ACCESS 程序员装上子弹、举起步枪、瞄准大象,这使大象感到可笑,究竟谁逃跑。他们无法抓住大象,因为由于他们对多重控制的偏爱,他们的吉普车有太多的方向盘因而无法驾驶。
ADA、APL和FORTRAN 程序员与圣诞老人和仙女一样是虚构的。
COBOL 程序员对和自己一样濒临灭绝的大象寄予了深切的同情。

posted @ 2013-04-27 19:22  坚固66  阅读(217)  评论(0编辑  收藏  举报