diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java index 86ed2e52f..b2d4e729e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperation.java @@ -44,7 +44,7 @@ import com.mongodb.client.MongoCollection; * query(Human.class) * .inCollection("star-wars") * .as(Jedi.class) - * .matching(query(where("firstname").is("luke"))) + * .matching(where("firstname").is("luke")) * .all(); * * @@ -174,13 +174,13 @@ public interface ExecutableFindOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingFind}. - * @throws IllegalArgumentException if query is {@literal null}. + * @throws IllegalArgumentException if criteria is {@literal null}. * @since 3.0 */ - default TerminatingFind matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingFind matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } /** @@ -304,9 +304,21 @@ public interface ExecutableFindOperation { * * @param query must not be {@literal null}. * @return new instance of {@link TerminatingDistinct}. - * @throws IllegalArgumentException if resultType is {@literal null}. + * @throws IllegalArgumentException if query is {@literal null}. */ TerminatingDistinct matching(Query query); + + /** + * Set the filter {@link CriteriaDefinition criteria} to be used. + * + * @param criteria must not be {@literal null}. + * @return new instance of {@link TerminatingDistinct}. + * @throws IllegalArgumentException if criteria is {@literal null}. + * @since 3.0 + */ + default TerminatingDistinct matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); + } } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableMapReduceOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableMapReduceOperation.java index 73ecb66be..be43d25a8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableMapReduceOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableMapReduceOperation.java @@ -152,13 +152,13 @@ public interface ExecutableMapReduceOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingMapReduce}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default TerminatingMapReduce matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingMapReduce matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableRemoveOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableRemoveOperation.java index 5f4fb8d9d..5c95c469e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableRemoveOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableRemoveOperation.java @@ -124,13 +124,13 @@ public interface ExecutableRemoveOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingRemove}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default TerminatingRemove matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingRemove matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperation.java index b3c9b084a..7b45b1068 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableUpdateOperation.java @@ -215,13 +215,13 @@ public interface ExecutableUpdateOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link UpdateWithUpdate}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default UpdateWithUpdate matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default UpdateWithUpdate matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperation.java index 8cc56a7e7..d9cdb3f25 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveFindOperation.java @@ -39,7 +39,7 @@ import org.springframework.data.mongodb.core.query.Query; * query(Human.class) * .inCollection("star-wars") * .as(Jedi.class) - * .matching(query(where("firstname").is("luke"))) + * .matching(where("firstname").is("luke")) * .all(); * * @@ -149,13 +149,13 @@ public interface ReactiveFindOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingFind}. - * @throws IllegalArgumentException if query is {@literal null}. + * @throws IllegalArgumentException if criteria is {@literal null}. * @since 3.0 */ - default TerminatingFind matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingFind matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } /** @@ -273,20 +273,20 @@ public interface ReactiveFindOperation { * * @param query must not be {@literal null}. * @return new instance of {@link TerminatingDistinct}. - * @throws IllegalArgumentException if resultType is {@literal null}. + * @throws IllegalArgumentException if query is {@literal null}. */ TerminatingDistinct matching(Query query); /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. - * @return new instance of {@link TerminatingFind}. - * @throws IllegalArgumentException if query is {@literal null}. + * @param criteria must not be {@literal null}. + * @return new instance of {@link TerminatingDistinct}. + * @throws IllegalArgumentException if criteria is {@literal null}. * @since 3.0 */ - default TerminatingDistinct matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingDistinct matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMapReduceOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMapReduceOperation.java index 12f71eb24..34a41cdc5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMapReduceOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMapReduceOperation.java @@ -151,13 +151,13 @@ public interface ReactiveMapReduceOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingMapReduce}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default TerminatingMapReduce matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingMapReduce matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveRemoveOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveRemoveOperation.java index f3c3421e3..499592a43 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveRemoveOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveRemoveOperation.java @@ -111,13 +111,13 @@ public interface ReactiveRemoveOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link TerminatingRemove}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default TerminatingRemove matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default TerminatingRemove matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveUpdateOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveUpdateOperation.java index cb8c154b0..74aa29799 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveUpdateOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveUpdateOperation.java @@ -176,13 +176,13 @@ public interface ReactiveUpdateOperation { /** * Set the filter {@link CriteriaDefinition criteria} to be used. * - * @param criteriaDefinition must not be {@literal null}. + * @param criteria must not be {@literal null}. * @return new instance of {@link UpdateWithUpdate}. * @throws IllegalArgumentException if query is {@literal null}. * @since 3.0 */ - default UpdateWithUpdate matching(CriteriaDefinition criteriaDefinition) { - return matching(Query.query(criteriaDefinition)); + default UpdateWithUpdate matching(CriteriaDefinition criteria) { + return matching(Query.query(criteria)); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java index 65fae75e6..e972b3eb3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupportTests.java @@ -536,6 +536,16 @@ class ExecutableFindOperationSupportTests { .isThrownBy(() -> template.query(Person.class).distinct("firstname").as(Long.class).all()); } + @Test // DATAMONGO-2507 + void distinctAppliesFilterQuery() { + + assertThat(template.query(Person.class).inCollection(STAR_WARS).distinct("firstname") // + .matching(where("lastname").is(luke.lastname)) // + .as(String.class) // + .all() // + ).containsExactlyInAnyOrder("luke"); + } + interface Contact {} @Data diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveFindOperationSupportTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveFindOperationSupportTests.java index a2eb57275..8b48bb67e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveFindOperationSupportTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveFindOperationSupportTests.java @@ -172,14 +172,6 @@ class ReactiveFindOperationSupportTests { .verifyComplete(); } - @Test // DATAMONGO-2507 - void findAllWithProjectionByCriteria() { - - template.query(Person.class).as(Jedi.class).matching(where("firstname").is("luke")).all() - .as(StepVerifier::create).consumeNextWith(it -> assertThat(it).isInstanceOf(Jedi.class)) // - .verifyComplete(); - } - @Test // DATAMONGO-1719 void findAllByWithCollectionUsingMappingInformation() { @@ -640,6 +632,17 @@ class ReactiveFindOperationSupportTests { .verify(); } + @Test // DATAMONGO-2507 + void distinctAppliesFilterQuery() { + + template.query(Person.class).inCollection(STAR_WARS).distinct("firstname") // + .matching(where("lastname").is(luke.lastname)) // + .as(String.class) // + .all() // + .as(StepVerifier::create).consumeNextWith(it -> assertThat(it).isEqualTo("luke")) // + .verifyComplete(); + } + interface Contact {} @Data