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 2333917f3..c06a7a691 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 @@ -196,9 +196,9 @@ 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 cc0890785..7ff8825c0 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 @@ -156,6 +156,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); @@ -299,6 +307,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 {