Om dit in Booleaanse logica te implementeren, doe ik het volgende en de conversie naar bewerkingen die beschikbaar zijn in programmeertalen
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)
In gewone SQL wordt dit gedaan als
where (null = :query) or (field = :query)
In MongoDB gebeurt dit via de $where
{ $where: '?0 == null || this.field == ?0' }
We kunnen dit een beetje versnellen door Mongo Operations te gebruiken in plaats van alles naar de functie te bouwen ten koste van enige leesbaarheid. werkt helaas niet.
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
Dus wat je hebt is
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
Dit kan verder worden uitgebreid om arrays voor in/alle clausules te verwerken
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);