Skip to content

Commit 14fb52c

Browse files
christophstroblmp911de
authored andcommitted
Fix aggregation projection.
Closes #5115 Original pull request: #5117
1 parent 5fdf034 commit 14fb52c

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
@@ -313,7 +313,7 @@ public <T> TypedOperations<T> forType(@Nullable Class<T> entityClass) {
313313
public <M, D> EntityProjection<M, D> introspectProjection(Class<M> resultType, Class<D> entityType) {
314314

315315
MongoPersistentEntity<?> persistentEntity = queryMapper.getMappingContext().getPersistentEntity(entityType);
316-
if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Document.class, resultType)) {
316+
if (persistentEntity == null && !resultType.isInterface() || ClassUtils.isAssignable(Map.class, resultType)) {
317317
return (EntityProjection) EntityProjection.nonProjecting(resultType);
318318
}
319319
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.Scanner;
4142
import java.util.stream.Stream;
@@ -2071,6 +2072,25 @@ void projectShouldResetContextToAvoidMappingFieldsAgainstANoLongerExistingTarget
20712072
assertThat(mappedResults.get(0)).containsEntry("itemId", "1");
20722073
}
20732074

2075+
@Test // GH-5115
2076+
@SuppressWarnings({ "rawtypes", "unchecked" })
2077+
void aggregationAllowsToReadBackRawDocumentAsMap() {
2078+
2079+
mongoTemplate.insert(List.of( //
2080+
Item.builder().itemId("1").build(), //
2081+
Item.builder().itemId("2").build(), //
2082+
Item.builder().itemId("3").build()), //
2083+
Item.class);
2084+
2085+
TypedAggregation<Item> aggregation = newAggregation(Item.class, count().as("count"));
2086+
2087+
AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, Map.class);
2088+
Map<Object, Object> uniqueResult = result.getUniqueMappedResult();
2089+
2090+
assertThat(uniqueResult).containsKey("count") //
2091+
.extracting(it -> it.get("count")).isEqualTo(3);
2092+
}
2093+
20742094
private void createUsersWithReferencedPersons() {
20752095

20762096
mongoTemplate.dropCollection(User.class);

0 commit comments

Comments
 (0)