You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
[[query.by.example.execution]] |
|
=== Executing Example |
|
|
|
.Query by Example using a Repository |
|
==== |
|
[source, java] |
|
---- |
|
public interface PersonRepository extends QueryByExampleExecutor<Person> { |
|
|
|
} |
|
|
|
public class PersonService { |
|
|
|
@Autowired PersonRepository personRepository; |
|
|
|
public List<Person> findPeople(Person probe) { |
|
return personRepository.findAll(Example.of(probe)); |
|
} |
|
} |
|
---- |
|
==== |
|
|
|
An `Example` containing an untyped `ExampleSpec` uses the Repository type and its collection name. Typed `ExampleSpec` use their type as result type and the collection name from the Repository. |
|
|
|
NOTE: When including `null` values in the `ExampleSpec` Spring Data Mongo uses embedded document matching instead of dot notation property matching. This forces exact document matching for all property values and the property order in the embedded document. |
|
|
|
Spring Data MongoDB provides support for the following matching options: |
|
|
|
[cols="1,2", options="header"] |
|
.`StringMatcher` options |
|
|=== |
|
| Matching |
|
| Logical result |
|
|
|
| `DEFAULT` (case-sensitive) |
|
| `{"firstname" : firstname}` |
|
|
|
| `DEFAULT` (case-insensitive) |
|
| `{"firstname" : { $regex: firstname, $options: 'i'}}` |
|
|
|
| `EXACT` (case-sensitive) |
|
| `{"firstname" : { $regex: /^firstname$/}}` |
|
|
|
| `EXACT` (case-insensitive) |
|
| `{"firstname" : { $regex: /^firstname$/, $options: 'i'}}` |
|
|
|
| `STARTING` (case-sensitive) |
|
| `{"firstname" : { $regex: /^firstname/}}` |
|
|
|
| `STARTING` (case-insensitive) |
|
| `{"firstname" : { $regex: /^firstname/, $options: 'i'}}` |
|
|
|
| `ENDING` (case-sensitive) |
|
| `{"firstname" : { $regex: /firstname$/}}` |
|
|
|
| `ENDING` (case-insensitive) |
|
| `{"firstname" : { $regex: /firstname$/, $options: 'i'}}` |
|
|
|
| `CONTAINING` (case-sensitive) |
|
| `{"firstname" : { $regex: /.\*firstname.*/}}` |
|
|
|
| `CONTAINING` (case-insensitive) |
|
| `{"firstname" : { $regex: /.\*firstname.*/, $options: 'i'}}` |
|
|
|
| `REGEX` (case-sensitive) |
|
| `{"firstname" : { $regex: /firstname/}}` |
|
|
|
| `REGEX` (case-insensitive) |
|
| `{"firstname" : { $regex: /firstname/, $options: 'i'}}` |
|
|
|
|===
|
|
|