diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java index 8a8ffa054..6078f23a1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java @@ -163,9 +163,9 @@ abstract class AggregationUtils { * @throws IllegalArgumentException when none of the above rules is met. */ @Nullable - static T extractSimpleTypeResult(Document source, Class targetType, MongoConverter converter) { + static T extractSimpleTypeResult(@Nullable Document source, Class targetType, MongoConverter converter) { - if (source.isEmpty()) { + if (source == null || source.isEmpty()) { return null; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedAggregationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedAggregationUnitTests.java index 59656e303..00506229e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedAggregationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedAggregationUnitTests.java @@ -159,6 +159,14 @@ public class StringBasedAggregationUnitTests { assertThat(executeAggregation("returnCollection").result).isEqualTo(expected); } + @Test // GH-3623 + public void returnNullWhenSingleResultIsNotPresent() { + + when(aggregationResults.getMappedResults()).thenReturn(Collections.emptyList()); + + assertThat(executeAggregation("simpleReturnType").result).isNull(); + } + @Test // DATAMONGO-2153 public void returnRawResultType() { assertThat(executeAggregation("returnRawResultType").result).isEqualTo(aggregationResults); @@ -312,6 +320,9 @@ public class StringBasedAggregationUnitTests { @Aggregation(RAW_GROUP_BY_LASTNAME_STRING) Page invalidPageReturnType(Pageable page); + + @Aggregation(RAW_GROUP_BY_LASTNAME_STRING) + String simpleReturnType(); } static class PersonAggregate {