DATAMONGO-1979 - Add default sorting for repository query methods using @Query(sort = "…").

We now allow to set a default sort for repository query methods via the @Query annotation.

	@Query(sort = "{ age : -1 }")
	List<Person> findByFirstname(String firstname);

Using an explicit Sort parameter along with the annotated one allows to alter the defaults set via the annotation. Method argument sort parameters add to / override the annotated defaults.

	@Query(sort = "{ age : -1 }")
	List<Person> findByFirstname(String firstname, Sort sort);

Original pull request: #566.
This commit is contained in:
Christoph Strobl
2018-06-04 15:18:34 +02:00
committed by Mark Paluch
parent dfede781fb
commit c5129aca45
10 changed files with 257 additions and 2 deletions

View File

@@ -395,6 +395,36 @@ public interface PersonRepository extends MongoRepository<Person, String>
The query in the preceding example returns only the `firstname`, `lastname` and `Id` properties of the `Person` objects. The `age` property, a `java.lang.Integer`, is not set and its value is therefore null.
[[mongodb.repositories.queries.sort]]
=== Sorting Query Method results
When it comes to sorting MongoDB query results via the repository interface there are several options as listed below.
.Sorting query results
====
[source,java]
----
public interface PersonRepository extends MongoRepository<Person, String> {
List<Person> findByFirstnameSortByAgeDesc(String firstname); <1>
List<Person> findByFirstname(String firstname, Sort sort); <2>
@Query(sort = "{ age : -1 }")
List<Person> findByFirstname(String firstname); <3>
@Query(sort = "{ age : -1 }")
List<Person> findByLastname(String lastname, Sort sort); <4>
}
----
<1> Fixed sorting derived from method name. `SortByAgeDesc` results in `{ age : -1 }` sort parameter.
<2> Dynamic sorting via method argument. `Sort.by(DESC, "age")` creates a `{ age : -1 }` sort parameter.
<3> Fixed sorting via `Query` annotation. Sort parameter applied as stated in the `sort` attribute.
<4> Default sorting via `Query` annotation combined with dynamic one via method argument. `Sort.unsorted()`
results in `{ age : -1 }`. Using `Sort.by(ASC, "age")` overrides the defaults and creates `{ age : 1 }`. `Sort.by
(ASC, "firstname")` alters the default and results in `{ age : -1, firstname : 1 }`.
====
[[mongodb.repositories.queries.json-spel]]
=== JSON-based Queries with SpEL Expressions