From aeea7439219aa519eeba718bea419243bcdc2087 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 16 Mar 2023 09:52:08 +0100 Subject: [PATCH] Polishing. Simplify field creation considering simplified projection expressions. See #3917 Original pull request: #4328 --- ...osedFieldsAggregationOperationContext.java | 20 +++++-------------- .../aggregation/AggregationUnitTests.java | 6 +++--- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ExposedFieldsAggregationOperationContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ExposedFieldsAggregationOperationContext.java index 1a88175d7..568a1a031 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ExposedFieldsAggregationOperationContext.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ExposedFieldsAggregationOperationContext.java @@ -96,23 +96,13 @@ class ExposedFieldsAggregationOperationContext implements AggregationOperationCo return exposedField; } - if(rootContext instanceof RelaxedTypeBasedAggregationOperationContext) { - return new DirectFieldReference(new ExposedField(new Field() { - @Override - public String getName() { - return name; - } + if (rootContext instanceof RelaxedTypeBasedAggregationOperationContext) { - @Override - public String getTarget() { - return field != null ? field.getTarget() : name; - } + if (field != null) { + return new DirectFieldReference(new ExposedField(field, true)); + } - @Override - public boolean isAliased() { - return true; - } - }, true)); + return new DirectFieldReference(new ExposedField(name, true)); } throw new IllegalArgumentException(String.format("Invalid reference '%s'", name)); 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 64bd9a141..69721a45c 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 @@ -601,7 +601,7 @@ public class AggregationUnitTests { new RelaxedTypeBasedAggregationOperationContext(BookWithFieldAnnotation.class, mappingContext, new QueryMapper(new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, mappingContext)))); - assertThat(extractPipelineElement(target, 1, "$project")).isEqualTo(Document.parse(" { \"_id\" : \"$_id\" }")); + assertThat(extractPipelineElement(target, 1, "$project")).isEqualTo(Document.parse(" { \"_id\" : 1 }")); } @Test // GH-3898 @@ -630,7 +630,7 @@ public class AggregationUnitTests { Document target = newAggregation(stage).toDocument("col-1", DEFAULT_CONTEXT); assertThat(extractPipelineElement(target, 0, "$project")).containsKey("name"); } - + @Test // GH-3917 void inheritedFieldsExposingContextShouldNotFailOnUnknownFieldReferenceForRelaxedRootContext() { @@ -648,7 +648,7 @@ public class AggregationUnitTests { MongoMappingContext mappingContext = new MongoMappingContext(); QueryMapper queryMapper = new QueryMapper(new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, mappingContext)); - + List documents = newAggregation(City.class, aggregationOperations).toPipeline(new RelaxedTypeBasedAggregationOperationContext(City.class, mappingContext, queryMapper)); assertThat(documents.get(2)).isEqualTo("{ $sort : { 'serial_number' : -1, 'label_name' : -1 } }"); }