MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

spring-data-mongo - parametri di query opzionali?

Per implementarlo nella logica booleana, eseguo quanto segue e la conversione in operazioni disponibili nei linguaggi di programmazione

:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)

In semplice SQL, questo viene fatto come

where (null = :query) or (field = :query)

In MongoDB questo viene fatto tramite $where

{ $where: '?0 == null || this.field == ?0' } 

Possiamo accelerare un po' utilizzando Mongo Operations piuttosto che costruire tutto sulla funzione a scapito di una certa leggibilità. purtroppo non funziona.

{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] } 

Quindi quello che hai è

@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);

Questo può essere ulteriormente ampliato per gestire gli array per le clausole in/all

@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);