diff --git a/pom.xml b/pom.xml
index f4eb82b8bb..ca276b9c07 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4546-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 2de4b6b635..2dde06c17d 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4546-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 41b81f9aa6..d1f4e8467e 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4546-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index d7a9ddaa63..cc54adba7b 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4546-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java
index 1d01c877b9..20e9677905 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java
@@ -39,6 +39,7 @@
import org.springframework.data.mongodb.repository.ReadPreference;
import org.springframework.data.mongodb.repository.Tailable;
import org.springframework.data.mongodb.repository.Update;
+import org.springframework.data.mongodb.util.BsonUtils;
import org.springframework.data.projection.ProjectionFactory;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.query.QueryMethod;
@@ -504,6 +505,16 @@ public void verify() {
}
}
}
+ if (hasAnnotatedAggregation()) {
+ for (String stage : getAnnotatedAggregation()) {
+ if (BsonUtils.isJsonArray(stage)) {
+ throw new IllegalStateException("""
+ Invalid aggregation pipeline. Please split Aggregation.pipeline from "[{...}, {...}]" to "{...}", "{...}".
+ Offending Method: %s.%s
+ """.formatted(method.getDeclaringClass().getSimpleName(), method.getName()));
+ }
+ }
+ }
}
private boolean isNumericOrVoidReturnValue() {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryMethodUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryMethodUnitTests.java
index 8663913007..7799a0fab0 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryMethodUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryMethodUnitTests.java
@@ -358,6 +358,15 @@ void detectsReadPreferenceForAggregation() throws Exception {
assertThat(method.getAnnotatedReadPreference()).isEqualTo("secondaryPreferred");
}
+ @Test // GH-4546
+ void errorsOnInvalidAggregation() throws Exception {
+
+ assertThatExceptionOfType(IllegalStateException.class) //
+ .isThrownBy(() -> queryMethod(InvalidAggregationMethodRepo.class, "findByAggregation").verify()) //
+ .withMessageContaining("Invalid aggregation") //
+ .withMessageContaining("findByAggregation");
+ }
+
private MongoQueryMethod queryMethod(Class> repository, String name, Class>... parameters) throws Exception {
Method method = repository.getMethod(name, parameters);
@@ -465,6 +474,12 @@ interface InvalidUpdateMethodRepo extends Repository {
Person findAndIncrementVisitsByFirstname(String firstname);
}
+ interface InvalidAggregationMethodRepo extends Repository {
+
+ @Aggregation("[{'$group': { _id: '$templateId', maxVersion : { $max : '$version'} } }]")
+ List findByAggregation();
+ }
+
interface Customer {
}