MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

spring-data-mongo - paramètres de requête facultatifs ?

Pour implémenter cela dans la logique booléenne, je fais ce qui suit et la conversion en opérations disponibles dans les langages de programmation

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

En SQL brut, cela se fait comme

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

Dans MongoDB, cela se fait via le $where

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

Nous pouvons accélérer un peu en utilisant Mongo Operations plutôt que de tout construire à la fonction au détriment d'une certaine lisibilité. ne fonctionne malheureusement pas.

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

Donc, ce que vous avez est

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

Cela peut être encore étendu pour gérer les tableaux pour les clauses in/all

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