@Test public void testIssue260() { createContentAndVersionData(); String map = "function () { emit(this.document_id, this.version); }"; String reduce = "function (key, values) { return Math.max.apply(Math, values); }"; MapReduceResults<ContentAndVersion> results = mongoTemplate.mapReduce( "jmr2", map, reduce, new MapReduceOptions().outputCollection("jmr2_out"), ContentAndVersion.class); int size = 0; for (ContentAndVersion cv : results) { if (cv.getId().equals("Resume")) { assertEquals(6, cv.getValue().longValue()); } if (cv.getId().equals("Schema")) { assertEquals(2, cv.getValue().longValue()); } if (cv.getId().equals("mongoDB How-To")) { assertEquals(2, cv.getValue().longValue()); } size++; } assertEquals(3, size); }
@Test public void testIssue260Part2() { createNumberAndVersionData(); String map = "function () { emit(this.number, this.version); }"; String reduce = "function (key, values) { return Math.max.apply(Math, values); }"; MapReduceResults<NumberAndVersion> results = mongoTemplate.mapReduce( "jmr2", map, reduce, new MapReduceOptions().outputCollection("jmr2_out"), NumberAndVersion.class); int size = 0; for (NumberAndVersion nv : results) { if (nv.getId().equals("1")) { assertEquals(2, nv.getValue().longValue()); } if (nv.getId().equals("2")) { assertEquals(6, nv.getValue().longValue()); } if (nv.getId().equals("3")) { assertEquals(2, nv.getValue().longValue()); } size++; } assertEquals(3, size); }
@Override public Map<String, Integer> analyseIngredientsByPopularity() { MapReduceResults<IngredientAnalysis> results = mongoTemplate.mapReduce( "menu", "classpath:ingredientsmap.js", "classpath:ingredientsreduce.js", IngredientAnalysis.class); Map<String, Integer> analysis = new HashMap<>(); for (IngredientAnalysis ingredientAnalysis : results) { analysis.put(ingredientAnalysis.getId(), ingredientAnalysis.getValue()); } return analysis; }
private void performMapReduce(boolean inline, boolean withQuery) { createMapReduceData(); MapReduceResults<ValueObject> results; if (inline) { if (withQuery) { results = mongoTemplate.mapReduce( new Query(), "jmr1", "classpath:map.js", "classpath:reduce.js", ValueObject.class); } else { results = mongoTemplate.mapReduce("jmr1", mapFunction, reduceFunction, ValueObject.class); } } else { if (withQuery) { results = mongoTemplate.mapReduce( new Query(), "jmr1", mapFunction, reduceFunction, options().outputCollection("jmr1_out"), ValueObject.class); } else { results = mongoTemplate.mapReduce( "jmr1", mapFunction, reduceFunction, new MapReduceOptions().outputCollection("jmr1_out"), ValueObject.class); } } Map<String, Float> m = copyToMap(results); assertMapReduceResults(m); }
@Test @Ignore public void testForDocs() { createMapReduceData(); MapReduceResults<ValueObject> results = mongoTemplate.mapReduce("jmr1", mapFunction, reduceFunction, ValueObject.class); for (ValueObject valueObject : results) { System.out.println(valueObject); } }
@Test public void testMapReduceExcludeQuery() { createMapReduceData(); Query query = new Query(where("x").ne(new String[] {"a", "b"})); MapReduceResults<ValueObject> results = mongoTemplate.mapReduce(query, "jmr1", mapFunction, reduceFunction, ValueObject.class); Map<String, Float> m = copyToMap(results); assertEquals(3, m.size()); assertEquals(1, m.get("b").intValue()); assertEquals(2, m.get("c").intValue()); assertEquals(1, m.get("d").intValue()); }
@Test public void testMapReduceInlineWithScope() { createMapReduceData(); Map<String, Object> scopeVariables = new HashMap<String, Object>(); scopeVariables.put("exclude", "a"); String mapWithExcludeFunction = "function(){ for ( var i=0; i<this.x.length; i++ ){ if(this.x[i] != exclude) emit( this.x[i] , 1 ); } }"; MapReduceResults<ValueObject> results = mongoTemplate.mapReduce( "jmr1", mapWithExcludeFunction, reduceFunction, new MapReduceOptions().scopeVariables(scopeVariables).outputTypeInline(), ValueObject.class); Map<String, Float> m = copyToMap(results); assertEquals(3, m.size()); assertEquals(2, m.get("b").intValue()); assertEquals(2, m.get("c").intValue()); assertEquals(1, m.get("d").intValue()); }