बूलियन तर्क में इसे लागू करने के लिए मैं निम्नलिखित करता हूं और प्रोग्रामिंग भाषाओं में उपलब्ध संचालन में रूपांतरण करता हूं
: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' }
हम इसे थोड़ा तेज कर सकते हैं कुछ पठनीयता की कीमत पर समारोह में सब कुछ बनाने के बजाय मोंगो ऑपरेशंस का उपयोग करके। दुर्भाग्य से काम नहीं करता।
{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }
तो आपके पास क्या है
@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);
इन/सभी खंडों के लिए सरणियों को संभालने के लिए इसे और विस्तारित किया जा सकता है
@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);