diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Index.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Index.java
index a737a9af9..b5c0353cd 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Index.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/Index.java
@@ -35,7 +35,17 @@ import com.mongodb.DBObject;
public class Index implements IndexDefinition {
public enum Duplicates {
- RETAIN, DROP
+ RETAIN, //
+
+ /**
+ * Dropping Duplicates was removed in MongoDB Server 2.8.0-rc0.
+ *
+ * See https://jira.mongodb.org/browse/SERVER-14710
+ *
+ * @deprecated since 1.7.
+ */
+ @Deprecated//
+ DROP
}
private final Map fieldSpec = new LinkedHashMap();
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/GroupByResults.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/GroupByResults.java
index f7104a816..a3dc65ee8 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/GroupByResults.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapreduce/GroupByResults.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2011 the original author or authors.
+ * Copyright 2011 - 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,7 +26,8 @@ import com.mongodb.DBObject;
* Collects the results of executing a group operation.
*
* @author Mark Pollack
- * @param The class in which the results are mapped onto, accessible via an interator.
+ * @author Christoph Strobl
+ * @param The class in which the results are mapped onto, accessible via an {@link Iterator}.
*/
public class GroupByResults implements Iterable {
@@ -38,6 +39,7 @@ public class GroupByResults implements Iterable {
private String serverUsed;
public GroupByResults(List mappedResults, DBObject rawResults) {
+
Assert.notNull(mappedResults);
Assert.notNull(rawResults);
this.mappedResults = mappedResults;
@@ -68,21 +70,24 @@ public class GroupByResults implements Iterable {
}
private void parseCount() {
+
Object object = rawResults.get("count");
- if (object instanceof Double) {
- count = (Double) object;
+ if (object instanceof Number) {
+ count = ((Number) object).doubleValue();
}
}
private void parseKeys() {
+
Object object = rawResults.get("keys");
- if (object instanceof Integer) {
- keys = (Integer) object;
+ if (object instanceof Number) {
+ keys = ((Number) object).intValue();
}
}
private void parseServerUsed() {
+
// "serverUsed" : "127.0.0.1:27017"
Object object = rawResults.get("serverUsed");
if (object instanceof String) {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
index a6076cb2f..03c23ba2e 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
@@ -105,6 +105,8 @@ public class MongoTemplateTests {
private static final org.springframework.data.util.Version TWO_DOT_FOUR = org.springframework.data.util.Version
.parse("2.4");
+ private static final org.springframework.data.util.Version TWO_DOT_EIGHT = org.springframework.data.util.Version
+ .parse("2.8");
@Autowired MongoTemplate template;
@Autowired MongoDbFactory factory;
@@ -115,7 +117,6 @@ public class MongoTemplateTests {
@Rule public ExpectedException thrown = ExpectedException.none();
@Autowired
- @SuppressWarnings("unchecked")
public void setMongo(Mongo mongo) throws Exception {
CustomConversions conversions = new CustomConversions(Arrays.asList(DateToDateTimeConverter.INSTANCE,
@@ -235,7 +236,7 @@ public class MongoTemplateTests {
template.insert(person);
fail("Expected DataIntegrityViolationException!");
} catch (DataIntegrityViolationException e) {
- assertThat(e.getMessage(), containsString("E11000 duplicate key error index: database.person.$_id_ dup key:"));
+ assertThat(e.getMessage(), containsString("E11000 duplicate key error index: database.person.$_id_"));
}
}
@@ -289,8 +290,7 @@ public class MongoTemplateTests {
template.save(person);
fail("Expected DataIntegrityViolationException!");
} catch (DataIntegrityViolationException e) {
- assertThat(e.getMessage(),
- containsString("E11000 duplicate key error index: database.person.$firstName_-1 dup key:"));
+ assertThat(e.getMessage(), containsString("E11000 duplicate key error index: database.person.$firstName_-1"));
}
}
@@ -318,6 +318,7 @@ public class MongoTemplateTests {
}
@Test
+ @SuppressWarnings("deprecation")
public void testEnsureIndex() throws Exception {
Person p1 = new Person("Oliver");
@@ -339,19 +340,29 @@ public class MongoTemplateTests {
if ("age_-1".equals(ix.get("name"))) {
indexKey = ix.get("key").toString();
unique = (Boolean) ix.get("unique");
- dropDupes = (Boolean) ix.get("dropDups");
+ if (mongoVersion.isLessThan(TWO_DOT_EIGHT)) {
+ dropDupes = (Boolean) ix.get("dropDups");
+ assertThat(dropDupes, is(true));
+ } else {
+ assertThat(ix.get("dropDups"), is(nullValue()));
+ }
}
}
assertThat(indexKey, is("{ \"age\" : -1}"));
assertThat(unique, is(true));
- assertThat(dropDupes, is(true));
List indexInfoList = template.indexOps(Person.class).getIndexInfo();
assertThat(indexInfoList.size(), is(2));
IndexInfo ii = indexInfoList.get(1);
assertThat(ii.isUnique(), is(true));
- assertThat(ii.isDropDuplicates(), is(true));
+
+ if (mongoVersion.isLessThan(TWO_DOT_EIGHT)) {
+ assertThat(ii.isDropDuplicates(), is(true));
+ } else {
+ assertThat(ii.isDropDuplicates(), is(false));
+ }
+
assertThat(ii.isSparse(), is(false));
List indexFields = ii.getIndexFields();
@@ -677,8 +688,8 @@ public class MongoTemplateTests {
Query q = new Query(Criteria.where("text").regex("^Hello.*"));
Message found1 = template.findAndRemove(q, Message.class);
Message found2 = template.findAndRemove(q, Message.class);
- // Message notFound = template.findAndRemove(q, Message.class);
- DBObject notFound = template.getCollection("").findAndRemove(q.getQueryObject());
+
+ Message notFound = template.findAndRemove(q, Message.class);
assertThat(found1, notNullValue());
assertThat(found2, notNullValue());
assertThat(notFound, nullValue());
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java
index 2ffa472b0..60e0eebfb 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java
@@ -49,6 +49,7 @@ import com.mongodb.Mongo;
*
* @author Mark Pollack
* @author Oliver Gierke
+ * @author Christoph Strobl
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:infrastructure.xml")
@@ -60,7 +61,6 @@ public class GroupByTests {
MongoTemplate mongoTemplate;
@Autowired
- @SuppressWarnings("unchecked")
public void setMongo(Mongo mongo) throws Exception {
MongoMappingContext mappingContext = new MongoMappingContext();
@@ -116,7 +116,7 @@ public class GroupByTests {
}
@Test
- public void SimpleGroup() {
+ public void simpleGroupFunction() {
createGroupByData();
GroupByResults results = mongoTemplate.group(
@@ -128,7 +128,7 @@ public class GroupByTests {
}
@Test
- public void SimpleGroupWithKeyFunction() {
+ public void simpleGroupWithKeyFunction() {
createGroupByData();
GroupByResults results = mongoTemplate.group(
@@ -140,7 +140,7 @@ public class GroupByTests {
}
@Test
- public void SimpleGroupWithFunctionsAsResources() {
+ public void simpleGroupWithFunctionsAsResources() {
createGroupByData();
GroupByResults results = mongoTemplate.group(
@@ -152,7 +152,7 @@ public class GroupByTests {
}
@Test
- public void SimpleGroupWithQueryAndFunctionsAsResources() {
+ public void simpleGroupWithQueryAndFunctionsAsResources() {
createGroupByData();
GroupByResults results = mongoTemplate.group(