`
七月先知
  • 浏览: 150067 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

morphia的mapreduce示例

阅读更多

mongodb有一个类似于orm映射的框架:morphia。其性质就类似于hibernate一样。 但它对mapreduce方法的包装并不是很方便使用,下面示例如下: 

 

public List<WeixinBean> getNewMessage(long updateTime) {
		
		//按用户分组,得到最小发送时间和最大更新时间
		String map = "function(){emit( this.openID+'#'+this.officalID,{ postTime: this.postTime,updateTime: this.updateTime} ); }";
		
		String function = "function(v){"
				+ "if(res.postTime == 0){"
				+ "res.postTime = v.postTime;"
				+ "}else if(res.postTime > v.postTime){"
				+ "res.postTime = v.postTime;"
				+ "}"
				+ "if(res.updateTime < v.updateTime){"
				+ "res.updateTime = v.updateTime;"
				+ "}"
				+ "}";
		String reduce = "function(key,values){"
				+ "var res = { postTime: 0,updateTime: 0}; "
				+ "values.forEach( "
				+ function
				+ " );"
				+ "return res;"
				+ "}";
		
		String outputCollection = "test";
		
		//在执行mapreduce之前,先查询出指定时间范围的数据作为map的输入
		BasicDBObject queryForMap = new BasicDBObject();  
//		if(compareCondition.equals(">")){
			//此处特别注意:不要使用put方法,否则查询无效,比如:new BasicDBObject().put("$gt", updateTime)
			queryForMap.append("updateTime", new BasicDBObject().append("$gt", updateTime));
//		}
		
		DBCollection weixinCollection = ds.getCollection(WeixinBean.class);
		MapReduceCommand cmd = new MapReduceCommand(
				weixinCollection,
				map,
				reduce,
				null,
				OutputType.INLINE,
				queryForMap);
		
		
		MapReduceOutput out = weixinCollection.mapReduce(cmd);
		
		CommandResult cr = out.getCommandResult();
		BasicDBList list = (BasicDBList)cr.get("results");
		List<WeixinBean> weixinList = new ArrayList<WeixinBean>();
		for(int i = 0 ; i < list.size() ; i++){
			BasicDBObject weixinObject = (BasicDBObject)list.get(i);
			System.out.print(weixinObject.getString("_id"));
			BasicDBObject value = (BasicDBObject)weixinObject.get("value");
			System.out.println(",postTime="+value.getLong("postTime") + ",updateTime="+ value.getLong("updateTime"));
			
			WeixinBean wb = new WeixinBean();
			String[] userIdArray = weixinObject.getString("_id").split("#");
			wb.setId(weixinObject.getString("_id"));
//			wb.setopenID(userIdArray[0]);
//			wb.setofficalID(userIdArray[1]);
			wb.setPostTime(value.getLong("postTime"));
			wb.setUpdateTime(value.getLong("updateTime"));
			weixinList.add(wb);
			
		}
		
		return weixinList;
		
		
//		DBCollection resultColl = out.getOutputCollection();    
//        DBCursor cursor= resultColl.find();    
//        while (cursor.hasNext()) {    
//            System.out.println(cursor.next());    
//        } 
		
//		MapreduceResults<WeixinBean> res = this.ds.mapReduce(MapreduceType.REDUCE, query, WeixinBean.class, cmd);
		
		
//		MapreduceResults<WeixinBean> res = ds.mapReduce(MapreduceType.INLINE, query, map, reduce, null, null, WeixinBean.class);
//		
//		res.setInlineRequiredOptions(WeixinBean.class, ds.getMapper(), new DefaultEntityCache());
//		Iterator<WeixinBean> it = res.getInlineResults();
////		Iterator<WeixinBean> it = res.iterator();
//		while(it.hasNext()){
//			WeixinBean wb = it.next();
//			System.out.println(wb.getId()+"-->"+wb.getPostTime());
//		}
//		
//		System.out.println(res.getCounts());
		
		
		
	}

 

分享到:
评论

相关推荐

    morphia-mongodb-examples:用于MongoDB的Morphia ODM的示例

    MongoDB是一种流行的NoSQL数据库系统,它以JSON格式存储数据,具有高度的可扩展性和灵活性。...通过研究这些示例,开发者可以快速上手Morphia,并将其应用到自己的项目中,提升MongoDB开发的效率和代码的可维护性。

    使用Morphia框架操作mongodb

    在Java开发中,Morphia是一个优秀的对象数据映射(ODM)框架,它简化了与MongoDB之间的交互,使得开发者可以像操作传统关系型数据库那样操作文档数据库。本文将深入探讨如何使用Morphia框架来操作MongoDB。 首先,...

    MorphiaEnumExample:显示带有枚举的查询 Morphia 的示例(mongodbmorphia 中的问题 #715)

    本示例“MorphiaEnumExample”着重展示了如何在Morphia中处理枚举类型(enum)的数据,以及进行相关的查询操作。这个问题是在mongodb/morphia项目的GitHub仓库中被讨论的,问题编号为#715。 首先,让我们了解什么是...

    morphia-0.99.jar

    morphia-0.99.jar 最新版本。

    morphia所用到的jar包

    MongoDB是一个流行的开源、分布式文档数据库,而Morphia是一个Java对象数据映射(Object-Document Mapping, ODM)框架,用于简化与MongoDB的交互。在这个压缩文件中,我们有两个重要的jar包:mongo-2.7.3.jar和...

    morphia.jar和mongo.jar

    标题中的“morphia.jar”和“mongo.jar”指的是两个与MongoDB数据库操作相关的Java库文件。MongoDB是一个流行的开源、分布式文档型数据库,而Morphia则是Java开发人员用来操作MongoDB的一个对象数据映射(ODM)框架...

    spring MVC morphia mongo 整合的例子

    7. **RESTful API设计**:示例可能展示了如何使用Spring MVC创建RESTful API,通过HTTP方法(GET, POST, PUT, DELETE)来对应MongoDB的操作。 8. **错误处理和日志记录**:Spring MVC提供了异常处理机制,可以定制...

    morphia-example-1:Java中使用Morphia ODM和Spring的示例项目

    "Morphia-example-1:Java中使用Morphia ODM和Spring的示例项目" 是一个基于Java开发的项目,其主要目的是展示如何在Java应用程序中使用Morphia对象数据映射(ODM)库来操作MongoDB数据库,并结合Spring框架进行集成...

    morphia基于mongodb的基本开发

    morphia基于mongodb的基本开发

    Morphia和MongoDB学习总结<三>

    **标题:“Morphia和MongoDB学习总结&lt;三&gt;”** 在本文中,我们将深入探讨Morphia,一个用于Java的MongoDB对象数据映射(ODM)库,以及它如何与MongoDB数据库进行交互。Morphia简化了在MongoDB中存储和检索Java对象的...

    Morphia操作MongoDB

    5. **示例代码** - 创建 `User` 实体类,并使用 `@Entity` 注解标记: ```java @Entity("users") public class User { @Id private ObjectId id; private String name; private String address; private ...

    Mongo的ORM框架的学习Morphia

    不过,在给出的例子中,没有使用Morphia的注解,这可能意味着这个示例主要展示了如何配置Spring Data MongoDB,而没有展示Morphia的具体用法。 要充分利用Morphia,我们需要在实体类中使用诸如`@Entity`、`@Id`等...

    morphia-1.3.2.jar

    morphia-1.3.2.jar

    morphia_jackson_java8_optional_example:将 Java 8 的 Optional 与 Morphia 和 Jackson 模型序列化一起使用的示例

    Morphia/Jackson Java 8 可选示例Morphia (mongoDB) 和 Jackson (JSON) 序列化都可以用来序列化/反序列化新的 Java 8 Optional 类型。 对于 Jackson,您只需要注册 JDK8 模块。 对于 Morphia,您需要为 Optional ...

    使用 Morphia 和 MongoDB 实现域模型持久性(ZZ)

    Morphia 是一个 Java 框架,它为 MongoDB 提供了对象数据映射(Object Data Mapping,简称 ODM)功能,使得开发者可以更方便地在 Java 对象与 MongoDB 文档之间进行转换。本篇文章将详细介绍如何使用 Morphia 和 ...

    Morphia 操作 MongoDB.pdf

    以下是一个简单的示例,展示了如何使用 Morphia 连接 MongoDB 并进行数据操作: ```java import org.mongodb.Mongo; import org.mongodb.MongoClient; import org.mongodb.gridfs.GridFS; import org.mongodb....

    Morphia 操作 MongoDB.docx

    【MongoDB与Morphia简介】 MongoDB是一款流行的NoSQL数据库系统,以其灵活的数据模型、高可用性和可扩展性而受到广泛欢迎。Morphia是针对MongoDB的一个Java持久层框架,它提供了简单易用的API,使得开发者能够方便地...

    morphia-1.00-SNAPSHOT.jar

    morphia mongo db OR-mapping mongo db再带的CRUD 太麻烦了, 一个不错的框架 类似 Hibernate

    Morphia开发简介.pdf

    【Morphia开发简介】 Morphia是一款针对MongoDB数据库的Java对象关系映射(ORM)框架,它的主要目标是让Java开发者能够以面向对象的方式处理数据库操作,从而减轻数据库设计的复杂性,使开发者能更专注于业务逻辑。...

    Morphia一个nosql的ORM框架

    **Morphia:一个NoSQL的ORM框架** Morphia是一个强大的Java ORM(对象关系映射)框架,专为MongoDB数据库设计。它允许开发者使用Java对象来操作数据库,消除了与传统SQL数据库交互时所需的SQL语法,使开发更加便捷...

Global site tag (gtag.js) - Google Analytics