- Customize JPA Repository base class:
@SpringBootApplication @EnableJpaRepositories(repositoryBaseClass = ExpressionsRepositoryImpl.class) public class Application { … }
- Change your repository to extend
ExpressionsRepository
:@Repository public interface EmployeeRepository extends ExpressionsRepository<Employee, Long> { }
- Build the controller/service:
@PostMapping("/search") public ResponseEntity<Page<EmployeeDto>> search(@RequestBody Expressions expressions, Pageable pageable) { return ok().body( employeeRepository.findAll(expressions, pageable).map(employeeMapper::toDto) ); }
- Send Mongodb query in JSON from frontend:
{ "$or": [ {"lastName": "ibrahim"}, { "$and": [ {"firstName": "mostafa"}, {"birthDate": {"$gt": "1990-01-01"}} ] } ] }
For a quick start see this Medium post or dev.to post or see this demo example on Github.
See documentation website for details about how to get started.
For spring-boot 3.x:
<dependency>
<groupId>com.github.mhewedy</groupId>
<artifactId>spring-data-jpa-mongodb-expressions</artifactId>
<version>0.1.3</version>
</dependency>
For spring-boot 2.x:
<dependency>
<groupId>com.github.mhewedy</groupId>
<artifactId>spring-data-jpa-mongodb-expressions</artifactId>
<version>0.0.8</version>
</dependency>
Special thanks to Rashad Saif and Hamada Elnoby for helping in the design, inspring with ideas, and for doing code review.
This repo has been mentioned in spring.io weekly news.