From 8f4eb9479e32214659964a1abf55b31021579619 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 28 Jun 2019 12:26:48 +0200 Subject: [PATCH 1/2] DATAMONGO-2311 - Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-benchmarks/pom.xml | 2 +- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 340e6922b4..853517893b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 2.2.0.BUILD-SNAPSHOT + 2.2.0.DATAMONGO-2311-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index bb7d9f03cc..5ea2044613 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.2.0.BUILD-SNAPSHOT + 2.2.0.DATAMONGO-2311-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index b32dcba387..4d0da69ce2 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-mongodb-parent - 2.2.0.BUILD-SNAPSHOT + 2.2.0.DATAMONGO-2311-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index b611cf01a8..05fab3b29f 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.2.0.BUILD-SNAPSHOT + 2.2.0.DATAMONGO-2311-SNAPSHOT ../pom.xml From 0a649f77561ec1fb50ca408759623b7aca9f8123 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 28 Jun 2019 15:26:29 +0200 Subject: [PATCH 2/2] DATAMONGO-2311 - Add shortcut to project with AggregationExpression to Aggregation. --- .../mongodb/core/aggregation/Aggregation.java | 23 +++++++++++++++++++ .../core/aggregation/AggregationTests.java | 7 ++++++ 2 files changed, 30 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java index 5cf5c852cc..6b1c9f2804 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java @@ -244,6 +244,29 @@ public static ProjectionOperation project(Fields fields) { return new ProjectionOperation(fields); } + /** + * Creates a new {@link ProjectionOperation} adding the given {@link AggregationExpression} as projection. + * + * @param expression must not be {@literal null}. + * @return new instance of {@link ProjectionOperation}. + * @throws IllegalArgumentException if the required argument is {@literal null}. + * @since 2.2 + */ + public static ProjectionOperation project(AggregationExpression expression) { + + return new ProjectionOperation(Fields.fields()) { + + @Override + public Document toDocument(AggregationOperationContext context) { + + Document target = super.toDocument(context); + Document $project = target.get("$project", Document.class); + $project.putAll(expression.toDocument(context)); + return target; + } + }; + } + /** * Factory method to create a new {@link UnwindOperation} for the field with the given name. * 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 7e481e5111..73573a60fe 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 @@ -1930,6 +1930,13 @@ public void runMatchOperationCriteriaThroughQueryMapperForUntypedAggregation() { assertThat(groupResults.getMappedResults().size()).isEqualTo(4); } + @Test // DATAMONGO-2311 + public void projectWithAggregationExpression() { + + assertThat(project(ctx -> new Document("field", 1)).toDocument(Aggregation.DEFAULT_CONTEXT)) + .isEqualTo(new Document("$project", new Document("field", 1))); + } + private void createUsersWithReferencedPersons() { mongoTemplate.dropCollection(User.class);