diff --git a/pom.xml b/pom.xml
index b6410e6887..e7c4241240 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.0-SNAPSHOT
+ 3.4.0-GH-3898-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index e2704a6753..46a37711bf 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.4.0-SNAPSHOT
+ 3.4.0-GH-3898-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index b75f8bf624..86f3690b93 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.4.0-SNAPSHOT
+ 3.4.0-GH-3898-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index ca96626cc9..67433dfcfc 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.4.0-SNAPSHOT
+ 3.4.0-GH-3898-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java
index d2f173e90b..dc2d70ace3 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java
@@ -1803,8 +1803,9 @@ public Document toDocument(AggregationOperationContext context) {
Document projections = new Document();
Fields fields = context.getFields(type);
- fields.forEach(it -> projections.append(it.getName(), 1));
- return context.getMappedObject(projections, type);
+
+ fields.forEach(it -> projections.append(it.getTarget(), 1));
+ return projections;
}
}
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContext.java
index ef9bfe73bb..0a7fa1003f 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContext.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContext.java
@@ -122,13 +122,13 @@ public Fields getFields(Class> type) {
return AggregationOperationContext.super.getFields(type);
}
- List fields = new ArrayList<>();
+ List fields = new ArrayList<>();
for (MongoPersistentProperty property : entity) {
- fields.add(property.getName());
+ fields.add(Fields.field(property.getName(), property.getFieldName()));
}
- return Fields.fields(fields.toArray(new String[0]));
+ return Fields.from(fields.toArray(new Field[0]));
}
/*
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationUnitTests.java
index 37aeb5b2cf..63394d229f 100755
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationUnitTests.java
@@ -27,6 +27,7 @@
import org.bson.Document;
import org.junit.jupiter.api.Test;
+import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond;
import org.springframework.data.mongodb.core.aggregation.ProjectionOperationUnitTests.BookWithFieldAnnotation;
@@ -598,9 +599,31 @@ void projectOnIdIsAlwaysValid() {
assertThat(extractPipelineElement(target, 1, "$project")).isEqualTo(Document.parse(" { \"_id\" : \"$_id\" }"));
}
+
+ @Test // GH-3898
+ void shouldNotConvertIncludeExcludeValuesForProjectOperation() {
+
+ MongoMappingContext mappingContext = new MongoMappingContext();
+ RelaxedTypeBasedAggregationOperationContext context = new RelaxedTypeBasedAggregationOperationContext(WithRetypedIdField.class, mappingContext,
+ new QueryMapper(new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, mappingContext)));
+ Document document = project(WithRetypedIdField.class).toDocument(context);
+ assertThat(document).isEqualTo(new Document("$project", new Document("_id", 1).append("renamed-field", 1)));
+ }
+
private Document extractPipelineElement(Document agg, int index, String operation) {
List pipeline = (List) agg.get("pipeline");
return (Document) pipeline.get(index).get(operation);
}
+
+ public class WithRetypedIdField {
+
+ @Id
+ @org.springframework.data.mongodb.core.mapping.Field
+ private String id;
+
+ @org.springframework.data.mongodb.core.mapping.Field("renamed-field")
+ private String foo;
+
+ }
}