これをブール論理で実装するために、私は次のことを行い、プログラミング言語で利用可能な操作に変換します
:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)
プレーンSQLでは、これは
として実行されます。where (null = :query) or (field = :query)
MongoDBでは、これは$ where
を介して行われます。{ $where: '?0 == null || this.field == ?0' }
これを少し高速化できます 読みやすさを犠牲にして関数にすべてを構築するのではなく、MongoOperationsを使用する。残念ながら動作しません。
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
だからあなたが持っているのは
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
これをさらに拡張して、in/all句の配列を処理することができます
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);