mongodb复杂查询
来源:互联网 发布:算法工程师主要做什么 编辑:程序博客网 时间:2024/06/05 21:09
mongodb复杂查询(基于mapreduce)http://blog.jobbole.com/80619/
最近想用mongodb实现一个类似于sql(select sum(xx) from table group by xxx)的东西。上数据:
sql语句
select sum(size) from table_name group by phone
js(mapreduce)注:reduce函数返回结果数据结构必须和map函数value的数据结构一致。因为reduce函数会将自己的返回值再次作为下一次reduce的输入值使用。
map: function() { ###total:自定义(作为json的key) emit(phone,{total:this.size}); }reduce: function(key,values) { var sum = {total:0}; for (var i=0;i<values.length;i++){ ###sum.total相当于total对应的值(size) sum.total += values[i].total; } ###sum的数据结构必须和map函数的value的结构一致 return sum; }
spring-mongodb实现(mapreduce)
<mongo:mongo id="mongo" host="${db.mongoAddress}" port="${db.mongoPort}"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value="${db.mongoName}"/> <constructor-arg name="userCredentials" ref="userCredentials"/> </bean> <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials"> <constructor-arg name="username" value="${db.mongoUsername}"/> <constructor-arg name="password" value="${db.mongoPassword}"/> </bean>
//map函数String m ="function() {"+ "emit(phone,{total:this.size});"+ "}";//reduce函数 String r = "function(key,values) {"+ "var sum = {total:0};"+ "for (var i=0;i<values.length;i++){" + "sum.total += values[i].total;" + "}"+ "return sum;"+ "}"; MapReduceResults persons = mongoTemplate.mapReduce("connection_", m, r, null); BasicDBList list = (BasicDBList) persons.getRawResults().get("results"); for (int i = 0; i < list.size(); i ++) { BasicDBObject obj = (BasicDBObject)list.get(i); Object o = obj.get("value"); System.out.println(JSON.toJSONString(obj)); }
测试结果
0 0
- mongodb复杂查询
- Mongodb复杂查询语句
- mongodb实现复杂报表查询
- Step into MongoDB - 07 - 复杂查询
- MongoDB简单查询与复杂查询性能对比
- MongoDB中复杂的分组查询统计(MapReduce)
- MongoDB中复杂的分组查询统计(MapReduce)
- 使用morphia实现对mongodb的复杂group查询
- MongoDB Dao层复杂查询、更新方法实现
- 复杂查询
- 复杂查询
- 复杂查询
- 复杂查询
- 复杂查询
- mongodb 复杂聚合
- Mongodb与spring集成(3)------MongoRepository实现增删改查和复杂查询
- Mongodb与spring集成(3)------MongoRepository实现增删改查和复杂查询
- Mongodb与spring集成 MongoRepository实现增删改查和复杂查询
- 标签学习
- 数组和字典
- 用户、角色和权限关系
- JAVA NIO之浅谈内存映射文件原理与DirectMemory
- 关于Unity中Shader的内置值
- mongodb复杂查询
- 【算法分析】QQ“一键退朝”之详细计算方法
- 碎碎念
- QT实现应用程序重启
- UIImageView 实现一组动画
- 排列组合算法实现
- 基本图算法之图的表示
- AsyncTask入门
- mysql 中查询语句表达式REGEXP用法