diff --git a/pom.xml b/pom.xml index a9f0e77bf2..098198a45b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 494925fb63..b09b1da5f1 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 - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index adb390d10a..4afd250c8b 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 - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 750ed23aa8..eca76cc80d 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 - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 9e52cbe397..1277893040 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 2.0.0.BUILD-SNAPSHOT + 2.0.0.DATAMONGO-1756-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 91fbf5b9e3..f5d512131c 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 @@ -1407,7 +1407,7 @@ public Document toDocument(AggregationOperationContext context) { protected List getOperationArguments(AggregationOperationContext context) { List result = new ArrayList(values.size()); - result.add(context.getReference(getField().getName()).toString()); + result.add(context.getReference(getField()).toString()); for (Object element : values) { 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 ba36ee7606..e6f6d378a5 100644 --- 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 @@ -559,6 +559,16 @@ public void groupOperationShouldAllowUsageOfDerivedSpELAggregationExpression() { assertThat(getAsDocument(fields, "foosum"), isBsonObject().containing("$first.$cond.else", "no-answer")); } + @Test // DATAMONGO-1756 + public void projectOperationShouldRenderNestedFieldNamesCorrectly() { + + Document agg = newAggregation(project().and("value1.value").plus("value2.value").as("val")).toDocument("collection", + Aggregation.DEFAULT_CONTEXT); + + assertThat(extractPipelineElement(agg, 0, "$project"), + is(equalTo(new Document("val", new Document("$add", Arrays.asList("$value1.value", "$value2.value")))))); + } + private Document extractPipelineElement(Document agg, int index, String operation) { List pipeline = (List) agg.get("pipeline"); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContextUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContextUnitTests.java index f1d415e6a9..7b73edfcfd 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContextUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/TypeBasedAggregationOperationContextUnitTests.java @@ -338,6 +338,18 @@ public void rendersAggregationIfNullInTypedAggregationContextCorrectly() { assertThat(age, isBsonObject().containing("$ifNull.[1]._class", Age.class.getName())); } + @Test // DATAMONGO-1756 + public void projectOperationShouldRenderNestedFieldNamesCorrectlyForTypedAggregation() { + + AggregationOperationContext context = getContext(Wrapper.class); + + Document agg = newAggregation(Wrapper.class, project().and("nested1.value1").plus("nested2.value2").as("val")) + .toDocument("collection", context); + + assertThat(getPipelineElementFromAggregationAt(agg, 0).get("$project"), is( + equalTo(new Document("val", new Document("$add", Arrays.asList("$nested1.value1", "$field2.nestedValue2")))))); + } + @org.springframework.data.mongodb.core.mapping.Document(collection = "person") public static class FooPerson { @@ -408,4 +420,15 @@ static class Bar { String name; } + + static class Wrapper { + + Nested nested1; + @org.springframework.data.mongodb.core.mapping.Field("field2") Nested nested2; + } + + static class Nested { + String value1; + @org.springframework.data.mongodb.core.mapping.Field("nestedValue2") String value2; + } }