From fd0adc490012c67981a68a259eedf422a94b95e6 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 10 Dec 2025 07:37:48 +0100 Subject: [PATCH 1/2] Prepare issue branch --- pom.xml | 2 +- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 6a61f22b08..17254bed58 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 5.1.0-SNAPSHOT + 5.1.x-GH-5115-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index cab02fe276..bcdd5bbd06 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 5.1.0-SNAPSHOT + 5.1.x-GH-5115-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index ec1af04ae0..fcf41e8dc0 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 5.1.0-SNAPSHOT + 5.1.x-GH-5115-SNAPSHOT ../pom.xml From f54d2670e4dcc25b5b6d505c46aec324a8661828 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 10 Dec 2025 08:15:13 +0100 Subject: [PATCH 2/2] Fix aggregation projection --- .../data/mongodb/core/EntityOperations.java | 2 +- .../core/aggregation/AggregationTests.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java index 79beeadd8d..1f1c30737a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java @@ -315,7 +315,7 @@ public TypedOperations forType(@Nullable Class entityClass) { public EntityProjection introspectProjection(Class resultType, Class entityType) { MongoPersistentEntity persistentEntity = queryMapper.getMappingContext().getPersistentEntity(entityType); - if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Document.class, resultType)) { + if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Map.class, resultType)) { return (EntityProjection) EntityProjection.nonProjecting(resultType); } return introspector.introspect(resultType, entityType); 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 f80871d352..569116a045 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 @@ -36,6 +36,7 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Scanner; @@ -2124,6 +2125,25 @@ void projectShouldResetContextToAvoidMappingFieldsAgainstANoLongerExistingTarget assertThat(mappedResults.get(0)).containsEntry("itemId", "1"); } + @Test // GH-5115 + @SuppressWarnings({ "rawtypes", "unchecked" }) + void aggregationAllowsToReadBackRawDocumentAsMap() { + + mongoTemplate.insert(List.of( // + Item.builder().itemId("1").build(), // + Item.builder().itemId("2").build(), // + Item.builder().itemId("3").build()), // + Item.class); + + TypedAggregation aggregation = newAggregation(Item.class, count().as("count")); + + AggregationResults result = mongoTemplate.aggregate(aggregation, Map.class); + Map uniqueResult = result.getUniqueMappedResult(); + + assertThat(uniqueResult).containsKey("count") // + .extracting(it -> it.get("count")).isEqualTo(3); + } + private void createUsersWithReferencedPersons() { mongoTemplate.dropCollection(User.class);