diff --git a/pom.xml b/pom.xml
index 5d28c8a5c5..f4fbf86758 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-3783-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 0033bd11d5..b572a3afcd 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-3783-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index f62c8dc7f4..f49dbdd8e9 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-3783-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 1f157e75bc..a1c610a1fa 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-3783-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
index 7a14f07c4c..e7deb38231 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
@@ -778,7 +778,8 @@ protected boolean isKeyword(String candidate) {
@Nullable
private Object applyFieldTargetTypeHintToValue(Field documentField, @Nullable Object value) {
- if (value == null || documentField.getProperty() == null || !documentField.getProperty().hasExplicitWriteTarget()) {
+ if (value == null || documentField.getProperty() == null || !documentField.getProperty().hasExplicitWriteTarget()
+ || value instanceof Document || value instanceof DBObject) {
return value;
}
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java
index efd354b866..808263697a 100755
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java
@@ -33,8 +33,7 @@
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
+
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
@@ -83,9 +82,12 @@ public class QueryMapperUnitTests {
@BeforeEach
void beforeEach() {
+ MongoCustomConversions conversions = new MongoCustomConversions();
this.context = new MongoMappingContext();
+ this.context.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
this.converter = new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, context);
+ this.converter.setCustomConversions(conversions);
this.converter.afterPropertiesSet();
this.mapper = new QueryMapper(converter);
@@ -1335,6 +1337,25 @@ void mapStringIdFieldProjection() {
assertThat(mappedFields).containsEntry("_id", 1);
}
+ @Test // GH-3783
+ void retainsId$InWithStringArray() {
+
+ org.bson.Document mappedQuery = mapper.getMappedObject(
+ org.bson.Document.parse("{ _id : { $in: [\"5b8bedceb1e0bfc07b008828\"]}}"),
+ context.getPersistentEntity(WithExplicitStringId.class));
+ assertThat(mappedQuery.get("_id")).isEqualTo(org.bson.Document.parse("{ $in: [\"5b8bedceb1e0bfc07b008828\"]}"));
+ }
+
+ @Test // GH-3783
+ void mapsId$InInToObjectIds() {
+
+ org.bson.Document mappedQuery = mapper.getMappedObject(
+ org.bson.Document.parse("{ _id : { $in: [\"5b8bedceb1e0bfc07b008828\"]}}"),
+ context.getPersistentEntity(ClassWithDefaultId.class));
+ assertThat(mappedQuery.get("_id"))
+ .isEqualTo(org.bson.Document.parse("{ $in: [ {$oid: \"5b8bedceb1e0bfc07b008828\" } ]}"));
+ }
+
class WithDeepArrayNesting {
List level0;
@@ -1404,6 +1425,12 @@ class WithStringId {
String name;
}
+ class WithExplicitStringId {
+
+ @MongoId(FieldType.STRING) String id;
+ String name;
+ }
+
class BigIntegerId {
@Id private BigInteger id;