Untuk menerapkan ini dalam logika Boolean saya melakukan hal berikut dan konversi ke operasi yang tersedia dalam bahasa pemrograman
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)
Dalam SQL biasa, ini dilakukan sebagai
where (null = :query) or (field = :query)
Di MongoDB ini dilakukan melalui $where
{ $where: '?0 == null || this.field == ?0' }
Kita bisa mempercepatnya sedikit dengan menggunakan Operasi Mongo daripada membangun semuanya ke fungsi dengan mengorbankan beberapa keterbacaan. sayangnya tidak berfungsi.
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
Jadi yang Anda miliki adalah
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
Ini dapat diperluas lebih lanjut untuk menangani array untuk klausa dalam/semua
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);