diff --git a/pom.xml b/pom.xml
index a6d5da9170..5ebeb88e7e 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-GH-3668-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 0033bd11d5..ab27c8220a 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-GH-3668-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index f62c8dc7f4..5ca5c51418 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-GH-3668-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 1f157e75bc..fa47f6bc22 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-GH-3668-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 0392dc5426..fc9c8dd7c8 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
@@ -195,19 +195,7 @@ public Document getMappedSort(Document sortObject, @Nullable MongoPersistentEnti
return new Document();
}
- sortObject = filterUnwrappedObjects(sortObject, entity);
-
- Document mappedSort = new Document();
- for (Map.Entry entry : BsonUtils.asMap(sortObject).entrySet()) {
-
- Field field = createPropertyField(entity, entry.getKey(), mappingContext);
- if (field.getProperty() != null && field.getProperty().isUnwrapped()) {
- continue;
- }
-
- mappedSort.put(field.getMappedKey(), entry.getValue());
- }
-
+ Document mappedSort = mapFieldsToPropertyNames(sortObject, entity);
mapMetaAttributes(mappedSort, entity, MetaMapping.WHEN_PRESENT);
return mappedSort;
}
@@ -225,13 +213,30 @@ public Document getMappedFields(Document fieldsObject, @Nullable MongoPersistent
Assert.notNull(fieldsObject, "FieldsObject must not be null!");
- fieldsObject = filterUnwrappedObjects(fieldsObject, entity);
-
- Document mappedFields = getMappedObject(fieldsObject, entity);
+ Document mappedFields = mapFieldsToPropertyNames(fieldsObject, entity);
mapMetaAttributes(mappedFields, entity, MetaMapping.FORCE);
return mappedFields;
}
+ private Document mapFieldsToPropertyNames(Document fields, @Nullable MongoPersistentEntity> entity) {
+
+ if(fields.isEmpty()) {
+ return new Document();
+
+ }
+ Document target = new Document();
+ for (Map.Entry entry : BsonUtils.asMap(filterUnwrappedObjects(fields, entity)).entrySet()) {
+
+ Field field = createPropertyField(entity, entry.getKey(), mappingContext);
+ if (field.getProperty() != null && field.getProperty().isUnwrapped()) {
+ continue;
+ }
+
+ target.put(field.getMappedKey(), entry.getValue());
+ }
+ return target;
+ }
+
private void mapMetaAttributes(Document source, @Nullable MongoPersistentEntity> entity, MetaMapping metaMapping) {
if (entity == null) {
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 770f8ebe20..ba883d14c4 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
@@ -50,6 +50,7 @@
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.mapping.FieldType;
+import org.springframework.data.mongodb.core.mapping.MongoId;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
import org.springframework.data.mongodb.core.mapping.TextScore;
@@ -1304,6 +1305,13 @@ void allowsUsingFieldPathsForPropertiesHavingCustomConversionRegistered() {
assertThat(mapper.getMappedSort(query.getQueryObject(), context.getPersistentEntity(Customer.class))).isEqualTo(new org.bson.Document("address.street", "1007 Mountain Drive"));
}
+ @Test // GH-3668
+ void mapStringIdFieldProjection() {
+
+ org.bson.Document mappedFields = mapper.getMappedFields(new org.bson.Document("id", 1), context.getPersistentEntity(WithStringId.class));
+ assertThat(mappedFields).containsEntry("_id", 1);
+ }
+
class WithDeepArrayNesting {
List level0;
@@ -1367,6 +1375,12 @@ class Sample {
@Id private String foo;
}
+ class WithStringId {
+
+ @MongoId String id;
+ String name;
+ }
+
class BigIntegerId {
@Id private BigInteger id;