Aby zaimplementować to w logice Boolean, wykonuję następujące czynności i konwersję na operacje dostępne w językach programowania
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)
W zwykłym SQL odbywa się to jako
where (null = :query) or (field = :query)
W MongoDB odbywa się to poprzez $where
{ $where: '?0 == null || this.field == ?0' }
Możemy to trochę przyspieszyć używając Mongo Operations zamiast budowania wszystkiego do funkcji kosztem pewnej czytelności. niestety nie działa.
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
Więc to, co masz, to
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
Można to dalej rozszerzyć, aby obsługiwać tablice dla wszystkich klauzul
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);