2013-01-09 34 views
0

我跑地圖MongoDB中減少嗎啡減少,這是我的java代碼地圖用的MongoDB和嗎啡

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

這項工作很好,並把結果爲「重新」集合,但我怎樣才能得到的結果對象或列表,而不插入到新的集合?

謝謝

+1

請參閱輸入參數的mapReduce命令的內聯選項。此外,這看起來像一個非常簡單的計算 - 您可能會考慮聚合框架,它會更快,並將結果作爲單個文檔返回。 –

+1

而不是MapreduceType.MERGE使用MapreduceType.INLINE。 – cubbuk

+0

@cubbuk:它沒有與MapreduceType.INLINE一起工作,它給出了'內聯map/reduce不被支持'的錯誤。 – user1573690

回答

5

我無法評論,因爲它違反了長度限制。

如果它不會太過分,你可以直接使用java驅動程序而不使用嗎啡接口。只需從morphia datastore獲取mongo對象並使用java driver's 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 

BTW嗎啡在github上https://github.com/jmkgreen/morphia較新的版本,也許你想檢查出來了。我看到新版本也不支持map-reduce的內聯操作。

+0

感謝cubbuk,這種方式非常簡單。 – user1573690

+0

不用客氣=) – cubbuk