diff --git a/pom.xml b/pom.xml
index 28e7260e25..dc475625bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml
index 69a19c150b..ebd9e4964e 100644
--- a/spring-data-mongodb-cross-store/pom.xml
+++ b/spring-data-mongodb-cross-store/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
../pom.xml
@@ -48,7 +48,7 @@
org.springframework.data
spring-data-mongodb
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 7302043a15..dce1504779 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml
index 0415f6eb5e..3e6bed42a7 100644
--- a/spring-data-mongodb-log4j/pom.xml
+++ b/spring-data-mongodb-log4j/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 6e84732769..906c3fbb6d 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-471-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Update.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Update.java
index cb74f434b0..e75c844f9d 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Update.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Update.java
@@ -196,6 +196,18 @@ public Update pushAll(String key, Object[] values) {
return this;
}
+ /**
+ * Update using {@code $addToSet} modifier.
+ * Allows creation of {@code $push} command for single or multiple (using {@code $each}) values
+ *
+ * @param key
+ * @return
+ * @since 1.5
+ */
+ public AddToSetBuilder addToSet(String key) {
+ return new AddToSetBuilder(key);
+ }
+
/**
* Update using the {@literal $addToSet} update modifier
*
@@ -408,7 +420,7 @@ public Object getValue() {
/**
* Builder for creating {@code $push} modifiers
*
- * @author Christop Strobl
+ * @author Christoph Strobl
*/
public class PushOperatorBuilder {
@@ -442,4 +454,41 @@ public Update value(Object value) {
return Update.this.push(key, value);
}
}
+
+ /**
+ * Builder for creating {@code $addToSet} modifier.
+ *
+ * @author Christoph Strobl
+ * @since 1.5
+ */
+ public class AddToSetBuilder {
+
+ private final String key;
+
+ public AddToSetBuilder(String key) {
+ this.key = key;
+ }
+
+ /**
+ * Propagates {@code $each} to {@code $addToSet}
+ *
+ * @param values
+ * @return
+ */
+ public Update each(Object... values) {
+ return Update.this.addToSet(this.key, new Each(values));
+ }
+
+ /**
+ * Propagates {@link #value(Object)} to {@code $addToSet}
+ *
+ * @param values
+ * @return
+ */
+ public Update value(Object value) {
+ return Update.this.addToSet(this.key, value);
+ }
+
+ }
+
}
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 c8ceb0306f..a7495880cd 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
@@ -2550,6 +2550,25 @@ public void savingAndReassigningLazyLoadingProxies() {
assertThat(savedMessage.normalContent.text, is(content.text));
}
+ /**
+ * @see DATAMONGO-471
+ */
+ @Test
+ public void updateMultiShouldAddValuesCorrectlyWhenUsingAddToSetWithEach() {
+
+ DocumentWithCollectionOfSimpleType document = new DocumentWithCollectionOfSimpleType();
+ document.values = Arrays.asList("spring");
+ template.save(document);
+
+ Query query = query(where("id").is(document.id));
+ assumeThat(template.findOne(query, DocumentWithCollectionOfSimpleType.class).values, hasSize(1));
+
+ Update update = new Update().addToSet("values").each("data", "mongodb");
+ template.updateMulti(query, update, DocumentWithCollectionOfSimpleType.class);
+
+ assertThat(template.findOne(query, DocumentWithCollectionOfSimpleType.class).values, hasSize(3));
+ }
+
static class DocumentWithDBRefCollection {
@Id public String id;
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
index fbc6dd7197..818f2cf412 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java
@@ -412,6 +412,46 @@ public void doesNotConvertRawDbObjects() {
assertThat(inClause, IsIterableContainingInOrder.