For at implementere dette i boolsk logik gør jeg følgende og konverteringen til operationer, der er tilgængelige i programmeringssprog
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)
I almindelig SQL udføres dette som
where (null = :query) or (field = :query)
I MongoDB gøres dette gennem $where
{ $where: '?0 == null || this.field == ?0' }
Vi kan fremskynde dette en smule ved at bruge Mongo Operations frem for at bygge alt til funktionen på bekostning af en vis læsbarhed. virker desværre ikke.
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
Så hvad du har er
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
Dette kan udvides yderligere til at håndtere arrays for in/all klausuler
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);