Browse Source

Fix aggregation projection.

Closes #5115
Original pull request: #5117
pull/4999/merge
Christoph Strobl 1 week ago committed by Mark Paluch
parent
commit
e1e3b108cc
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/EntityOperations.java
  2. 20
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java

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

@ -315,7 +315,7 @@ class EntityOperations {
public <M, D> EntityProjection<M, D> introspectProjection(Class<M> resultType, Class<D> entityType) { public <M, D> EntityProjection<M, D> introspectProjection(Class<M> resultType, Class<D> entityType) {
MongoPersistentEntity<?> persistentEntity = queryMapper.getMappingContext().getPersistentEntity(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 (EntityProjection) EntityProjection.nonProjecting(resultType);
} }
return introspector.introspect(resultType, entityType); return introspector.introspect(resultType, entityType);

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

@ -36,6 +36,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Scanner; import java.util.Scanner;
@ -2124,6 +2125,25 @@ public class AggregationTests {
assertThat(mappedResults.get(0)).containsEntry("itemId", "1"); 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<Item> aggregation = newAggregation(Item.class, count().as("count"));
AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, Map.class);
Map<Object, Object> uniqueResult = result.getUniqueMappedResult();
assertThat(uniqueResult).containsKey("count") //
.extracting(it -> it.get("count")).isEqualTo(3);
}
private void createUsersWithReferencedPersons() { private void createUsersWithReferencedPersons() {
mongoTemplate.dropCollection(User.class); mongoTemplate.dropCollection(User.class);

Loading…
Cancel
Save