Пользовательский запрос регулярных выражений MongoDB + Spring Data - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь написать запрос "opensWith" в Spring Data, используя MongoDB.Если я пишу это в оболочке Mongo, она работает, перечисляет все адреса электронной почты, начинающиеся с буквы x или X (без учета регистра): db.user.find({email:/^x/i})

Однако это не так:

@Query(value = "{'$or':[{'name':?0},{'email':?0}]}")
List<User> findAllByFreeTextSearch(String keyword);

Я попытался добавить /^.../i к самому ключевому слову и в дюжине комбинаций к @Query, но безуспешно.Какой правильный синтаксис?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

/ expression / - альтернативный синтаксис, используемый в драйверах shell & js.

Вам необходимо передать «^ x» в качестве ключевого слова для драйвера java.

Попробуйте

@Query(value = "{$or:[{name:{$regex:?0,$options:'i'}},{email:{$regex:?0,$options:'i'}}]}")
List<User> findAllByFreeTextSearch(String keyword);
0 голосов
/ 17 декабря 2018

Spring Data упаковывает эти параметры намеренно, чтобы предотвратить выполнение вредоносных шаблонов с помощью аннотированного запроса.

Для этого используйте $regex, как показано ниже.

@Query("{'$or':[{ 'name' : { '$regex' : '?0', '$options' : 'i'}}, ...")
List<User> findAllByFreeTextSearch(String keyword);
...