42. Mongodb聚合游标<4> mapReduce
这玩意算是聚合函数中最复杂的了,不过复杂也好,越复杂就越灵活。
mapReduce其实是一种编程模型,用在分布式计算中,其中有一个“map”函数,一个”reduce“函数。
① map:
这个称为映射函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。
② reduce:
这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是 emit中的key,vlaue为emit分组后的emit(value)的集合,这里也就是很多{"count":1}的数组。
③ mapReduce:
这个就是最后执行的函数了,参数为map,reduce和一些可选参数。具体看例子:
43. Mongodb聚合游标 现在我要统计同一age的name,也就是像如下的结果:
①第一步是写映射(Map)函数,可以简单的理解成分组
var m=function(){ emit(this.age,this.name); }
②编写reduce函数, reduce函数会处理每一个分组:
var r=function(key,values){ var ret={age:key,names:values}; return ret; }
③编写finalize函数对reduce的返回值做最后处理:
var f=function(key,rval){ if(key==0){ rval.msg="a new life,baby!"; } return rval; }
最后运行
db.runCommand({ mapreduce:"t", map:m, reduce:r, finalize:f, out:"t_age_names" })
45. Mongodb聚合游标二:游标
mongodb里面的游标有点类似我们说的C#里面延迟执行,比如:
var list=db.user.find();
针对这样的操作,list其实并没有获取到user中的文档,而是申明一个“查询结构”,等我们需要的时候通过for或者next()一次性加载过来,然后让游标逐行读取,当我们枚举完了之后,游标销毁,之后我们在通过list获取时,发现没有数据返回了。
当然我们的“查询构造”还可以搞的复杂点,比如分页,排序都可以加进去。
var single=db.user.find().sort({"name",1}).skip(2).limit(2);
53. MongoDb实践java的CURD操作1.需要mongo-java-driver-2.13.3.jar
2.CURD操作实例
Mongo mg = new Mongo("localhost", 27017);
DB db = mg.getDB("test");
DBCollection users = db.getCollection("person");
//单条插入
DBObject user = new BasicDBObject();
user.put("name", “wps");
user.put("age", 20);
user.put("sex", "男");
users.save(user);
54. MongoDb实践java的CURD操作1.添加
users.insert(user, new BasicDBObject("name", "tom"));
2.修改
users.update(
new BasicDBObject("_id", new ObjectId("4dde25d06be7c53ffbd70906")),
new BasicDBObject(“age”, 99));
3.删除
users.remove(new BasicDBObject("_id", new ObjectId("4de73f7acd812d61b4626a77")));
4 .查询
DBCursor cur = users.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}