0

我在 mongoDB 中使用 morphia 运行 map reduce,这是我的 java 代码

String map = "function() { emit(this.id,this.cal.charge)}";
String reduce = "function(k, v) {var i, sum = 0;for (i in v) {sum += v[i];}return sum;}";

MapreduceResults<Results> mrRes = ds.mapReduce(MapreduceType.MERGE,ds.createQuery(MyTable.class).field("id").equal(5),map,reduce,null,null,Re.class);   

这工作正常并将结果放入“重新”集合,但是如何在不插入新集合的情况下将结果作为对象或列表获取?

谢谢

4

1 回答 1

5

我无法对此发表评论,因为它违反了长度限制。

如果不嫌麻烦的话,直接用java驱动就可以了,不用morphia接口。只需从 morphia 数据存储中获取 mongo 对象并使用 java 驱动程序的 map reduce 命令;它是这样的:

DBObject queryObject = new BasicDBObject("id", 5);
DBCollection collection = ds.getCollection(MyTable.class);

MapReduceCommand mrc = new MapReduceCommand(collection, // collection to do map-reduce on
                                            map, // map function
                                            reduce, // reduce function
                                            null, // output collection for the result
                                            MapReduceCommand.OutputType.INLINE, // output result type
                                            queryObject); // query to use in map reduce function

顺便说一句,morphia 在 github https://github.com/jmkgreen/morphia中有一个更新的版本,也许你也想看看。我看到较新的版本也不支持 map-reduce 的内联操作。

于 2013-01-09T11:37:24.197 回答