From 926d1ed5b88d629d86c3c4113bbc9647e8ba873b Mon Sep 17 00:00:00 2001 From: Thomas Darimont Date: Mon, 16 Feb 2015 16:05:15 +0100 Subject: [PATCH 1/2] DATAMONGO-1133 - Field aliasing is not honored in Aggregation operations. Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb-log4j/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 93a4e6bf2a..dd27ef0766 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index c7610beee4..073ae09cd3 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.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 13110137b6..990b41b8c0 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.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index 6ff09e4577..b65023c23f 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.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 7c2d818c42..96e06f644a 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.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1133-SNAPSHOT ../pom.xml From c964a18156bc5769cde146c77890d0b6c623ca35 Mon Sep 17 00:00:00 2001 From: Thomas Darimont Date: Mon, 16 Feb 2015 16:32:50 +0100 Subject: [PATCH 2/2] DATAMONGO-1133 - Assert that Field aliasing is honored in Aggregation operations. Added some test to show that field aliases are honored during object rendering in Aggregation operations. Original pull request: #279. --- .../core/aggregation/AggregationTests.java | 25 ++++++++++++ .../mongodb/core/aggregation/MeterData.java | 38 +++++++++++++++++++ ...dAggregationOperationContextUnitTests.java | 18 +++++++++ 3 files changed, 81 insertions(+) create mode 100644 spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/MeterData.java diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java index 799e0c6b6d..918831bf6c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java @@ -125,6 +125,7 @@ private void cleanDb() { mongoTemplate.dropCollection(Person.class); mongoTemplate.dropCollection(Reservation.class); mongoTemplate.dropCollection(Venue.class); + mongoTemplate.dropCollection(MeterData.class); } /** @@ -1044,6 +1045,30 @@ public void shouldSupportGeoNearQueriesForAggregationWithDistanceField() { assertThat((Double) firstResult.get("distance"), closeTo(117.620092203928, 0.00001)); } + /** + * @see DATAMONGO-1133 + */ + @Test + public void shouldHonorFieldAliasesForFieldReferences() { + + mongoTemplate.insert(new MeterData("m1", "counter1", 42)); + mongoTemplate.insert(new MeterData("m1", "counter1", 13)); + mongoTemplate.insert(new MeterData("m1", "counter1", 45)); + + TypedAggregation agg = newAggregation(MeterData.class, // + match(where("resourceId").is("m1")), // + group("counterName").sum("counterVolume").as("totalValue") // + ); + + AggregationResults results = mongoTemplate.aggregate(agg, DBObject.class); + + assertThat(results.getMappedResults(), hasSize(1)); + DBObject result = results.getMappedResults().get(0); + + assertThat(result.get("_id"), is(equalTo((Object) "counter1"))); + assertThat(result.get("totalValue"), is(equalTo((Object) 42.0))); + } + private void assertLikeStats(LikeStats like, String id, long count) { assertThat(like, is(notNullValue())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/MeterData.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/MeterData.java new file mode 100644 index 0000000000..4981e3eac9 --- /dev/null +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/MeterData.java @@ -0,0 +1,38 @@ +/* + * Copyright 2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.mongodb.core.aggregation; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Field; + +/** + * @author Thomas Darimont + */ +public class MeterData { + + @Id String resourceId; + @Field("counter_name") String counterName; + double counterVolume; + + public MeterData() {} + + public MeterData(String resourceId, String counterName, double counterVolume) { + + this.resourceId = resourceId; + this.counterName = counterName; + this.counterVolume = counterVolume; + } +} 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 c0c37bb38e..edace3a47d 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 @@ -169,6 +169,24 @@ public void rendersAggregationOptionsInTypedAggregationContextCorrectly() { assertThat(dbo.get("cursor"), is((Object) new BasicDBObject("foo", 1))); } + /** + * @see DATAMONGO-1133 + */ + @Test + public void shouldHonorAliasedFieldsInGroupExpressions() { + + TypeBasedAggregationOperationContext context = getContext(MeterData.class); + TypedAggregation agg = newAggregation(MeterData.class, + group("counterName").sum("counterVolume").as("totalCounterVolume")); + + DBObject dbo = agg.toDbObject("meterData", context); + DBObject group = getPipelineElementFromAggregationAt(dbo, 0); + + DBObject definition = (DBObject) group.get("$group"); + + assertThat(definition.get("_id"), is(equalTo((Object) "$counter_name"))); + } + @Document(collection = "person") public static class FooPerson {