MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

spring-data-mongo - parâmetros de consulta opcionais?


Para implementar isso em lógica booleana faço o seguinte e a conversão para operações que estão disponíveis em linguagens de programação
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)

No SQL simples, isso é feito como
where (null = :query) or (field = :query)

No MongoDB isso é feito através do $where
{ $where: '?0 == null || this.field == ?0' } 

Podemos acelerar um pouco usando o Mongo Operations em vez de construir tudo para a função às custas de alguma legibilidade. não funciona infelizmente.
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] } 

Então o que você tem é
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);

Isso pode ser expandido para lidar com arrays para cláusulas in/all
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);