From 7275a10c1e59811604a6c6fa6d9d4e185bc835e3 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 13 Feb 2018 10:10:32 +0100 Subject: [PATCH] DATAMONGO-1871 - Fix AggregationExpression aliasing. We now make sure to allow a nested property alias by setting the target. Original pull request: #533. --- .../core/aggregation/ProjectionOperation.java | 2 +- .../core/aggregation/AggregationUnitTests.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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 57c8e1d3e..4b3c56f90 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 @@ -455,7 +455,7 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation { } if (value instanceof AggregationExpression) { - return this.operation.and(new ExpressionProjection(Fields.field(alias), (AggregationExpression) value)); + return this.operation.and(new ExpressionProjection(Fields.field(alias, alias), (AggregationExpression) value)); } return this.operation.and(new FieldProjection(Fields.field(alias, name), null)); 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 99e8bc386..d56bb9c20 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 @@ -574,6 +574,23 @@ public class AggregationUnitTests { new BasicDBObject("$add", new BasicDbListBuilder().add("$value1.value").add("$value2.value").get()))))); } + @Test // DATAMONGO-1871 + public void providedAliasShouldAllowNestingExpressionWithAliasCorrectly() { + + DBObject condition = new BasicDBObject("$and", + Arrays.asList(new BasicDBObject("$gte", new BasicDbListBuilder().add("$$est.dt").add("2015-12-29").get()), // + new BasicDBObject("$lte", new BasicDbListBuilder().add("$$est.dt").add("2017-12-29").get()) // + )); + + Aggregation agg = newAggregation(project("_id", "dId", "aId", "cty", "cat", "plts.plt") + .and(ArrayOperators.arrayOf("plts.ests").filter().as("est").by(condition)).as("plts.ests")); + + DBObject $project = extractPipelineElement(agg.toDbObject("collection-1", Aggregation.DEFAULT_CONTEXT), 0, + "$project"); + + assertThat($project.containsField("plts.ests"), is(true)); + } + private DBObject extractPipelineElement(DBObject agg, int index, String operation) { List pipeline = (List) agg.get("pipeline");