MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

spring-data-mongo - optionale Abfrageparameter?

Um dies in boolescher Logik zu implementieren, mache ich Folgendes und die Umwandlung in Operationen, die in Programmiersprachen verfügbar sind

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

In einfachem SQL geschieht dies als

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

In MongoDB geschieht dies über das $where

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

Wir können dies ein wenig beschleunigen indem Sie Mongo Operations verwenden, anstatt alles auf Kosten der Lesbarkeit in die Funktion zu integrieren. funktioniert leider nicht.

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

Was Sie also haben, ist

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

Dies kann weiter erweitert werden, um Arrays für in/all-Klauseln zu handhaben

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