Skip to content

Commit e1e3b10

Browse files
christophstroblmp911de
authored andcommitted
Fix aggregation projection.
Closes #5115 Original pull request: #5117
1 parent 89e2fbc commit e1e3b10

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public <T> TypedOperations<T> forType(@Nullable Class<T> entityClass) {
315315
public <M, D> EntityProjection<M, D> introspectProjection(Class<M> resultType, Class<D> entityType) {
316316

317317
MongoPersistentEntity<?> persistentEntity = queryMapper.getMappingContext().getPersistentEntity(entityType);
318-
if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Document.class, resultType)) {
318+
if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Map.class, resultType)) {
319319
return (EntityProjection) EntityProjection.nonProjecting(resultType);
320320
}
321321
return introspector.introspect(resultType, entityType);

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.Collections;
3737
import java.util.Date;
3838
import java.util.List;
39+
import java.util.Map;
3940
import java.util.Objects;
4041
import java.util.Optional;
4142
import java.util.Scanner;
@@ -2124,6 +2125,25 @@ void projectShouldResetContextToAvoidMappingFieldsAgainstANoLongerExistingTarget
21242125
assertThat(mappedResults.get(0)).containsEntry("itemId", "1");
21252126
}
21262127

2128+
@Test // GH-5115
2129+
@SuppressWarnings({ "rawtypes", "unchecked" })
2130+
void aggregationAllowsToReadBackRawDocumentAsMap() {
2131+
2132+
mongoTemplate.insert(List.of( //
2133+
Item.builder().itemId("1").build(), //
2134+
Item.builder().itemId("2").build(), //
2135+
Item.builder().itemId("3").build()), //
2136+
Item.class);
2137+
2138+
TypedAggregation<Item> aggregation = newAggregation(Item.class, count().as("count"));
2139+
2140+
AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, Map.class);
2141+
Map<Object, Object> uniqueResult = result.getUniqueMappedResult();
2142+
2143+
assertThat(uniqueResult).containsKey("count") //
2144+
.extracting(it -> it.get("count")).isEqualTo(3);
2145+
}
2146+
21272147
private void createUsersWithReferencedPersons() {
21282148

21292149
mongoTemplate.dropCollection(User.class);

0 commit comments

Comments
 (0)