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.
This commit is contained in:
committed by
Oliver Gierke
parent
39d9312005
commit
60ca1b3509
@@ -125,6 +125,7 @@ public class AggregationTests {
|
|||||||
mongoTemplate.dropCollection(Person.class);
|
mongoTemplate.dropCollection(Person.class);
|
||||||
mongoTemplate.dropCollection(Reservation.class);
|
mongoTemplate.dropCollection(Reservation.class);
|
||||||
mongoTemplate.dropCollection(Venue.class);
|
mongoTemplate.dropCollection(Venue.class);
|
||||||
|
mongoTemplate.dropCollection(MeterData.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1044,6 +1045,30 @@ public class AggregationTests {
|
|||||||
assertThat((Double) firstResult.get("distance"), closeTo(117.620092203928, 0.00001));
|
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<MeterData> agg = newAggregation(MeterData.class, //
|
||||||
|
match(where("resourceId").is("m1")), //
|
||||||
|
group("counterName").sum("counterVolume").as("totalValue") //
|
||||||
|
);
|
||||||
|
|
||||||
|
AggregationResults<DBObject> 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) {
|
private void assertLikeStats(LikeStats like, String id, long count) {
|
||||||
|
|
||||||
assertThat(like, is(notNullValue()));
|
assertThat(like, is(notNullValue()));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-2014 the original author or authors.
|
* Copyright 2013-2015 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -169,6 +169,24 @@ public class TypeBasedAggregationOperationContextUnitTests {
|
|||||||
assertThat(dbo.get("cursor"), is((Object) new BasicDBObject("foo", 1)));
|
assertThat(dbo.get("cursor"), is((Object) new BasicDBObject("foo", 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DATAMONGO-1133
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void shouldHonorAliasedFieldsInGroupExpressions() {
|
||||||
|
|
||||||
|
TypeBasedAggregationOperationContext context = getContext(MeterData.class);
|
||||||
|
TypedAggregation<MeterData> 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")
|
@Document(collection = "person")
|
||||||
public static class FooPerson {
|
public static class FooPerson {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user