Я пытаюсь фильтровать с помощью пользовательского выражения и нескольких полей. Для имени поля я использую регулярное выражение. И все остальные поля, которые я проверяю, содержатся ли они в списке параметров.
@Query(value =
"{$and:["
+ "{'name': {$regex: ?0, $options: 'i'}},"
+ "{'types': {$in: ?1}},"
+ "{'customer': {$in: ?2}}"
+ "]}")
Optional<List<Object>> findByFilter(
@Param("name") String name,
@Param("types") Collection<String> types,
@Param("customers") Collection<String> customers,
Pageable pageable);
Как я могу игнорировать, если параметр равен нулю? Я пробовал язык выражения Spring, но он не работает.
@Query(value =
"{$and:["
+ "{'name': {$regex: ?0, $options: 'i'}},"
+ "{'types': {$in: ?1}},"
+ "?#{ [2] != null ? {'customer': {$in: [2]}} }"
+ "]}")
Optional<List<Object>> findByFilter(
@Param("name") String name,
@Param("types") Collection<String> types,
@Param("customers") Collection<String> customers,
Pageable pageable);