Java 自定义查询regex MongoDB+Spring数据

Java 自定义查询regex MongoDB+Spring数据,java,mongodb,spring-data,spring-data-mongodb,Java,Mongodb,Spring Data,Spring Data Mongodb,我正在尝试使用MongoDB在Spring数据中编写一个startsWith查询。如果我在MongoShell中编写,它会工作,列出每个以字母x或x开头的电子邮件地址,不区分大小写:db.user.find{email://^x/I} 但是,这并不是: @Query(value = "{'$or':[{'name':?0},{'email':?0}]}") List<User> findAllByFreeTextSearch(String keyword); 我试图将/^…/I添加

我正在尝试使用MongoDB在Spring数据中编写一个startsWith查询。如果我在MongoShell中编写,它会工作,列出每个以字母x或x开头的电子邮件地址,不区分大小写:db.user.find{email://^x/I}

但是,这并不是:

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

我试图将/^…/I添加到关键字本身,并以十几种组合添加到@Query中,但运气不佳。正确的语法是什么?

Spring数据包装这些参数,目的是防止恶意模式通过带注释的查询执行

请使用下面这样的$regex

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

Spring数据通过意图包装这些参数,以防止恶意模式通过带注释的查询执行

请使用下面这样的$regex

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

/expression/是shell&js驱动程序中使用的可选语法

您需要将^x作为java驱动程序的关键字传递

试一试


/expression/是shell&js驱动程序中使用的可选语法

您需要将^x作为java驱动程序的关键字传递

试一试


因为当你向你的查询发送一个字符串时,它会像{'$或':[{'name':'/^x/'},{'email':'/^x/'}]}那样翻译,注意引号,这会导致problem@YCF_L我也尝试过类似于/^?0/的东西,但没有运气。你能展示一个工作示例吗?即使这样,也会用引号翻译,因为当你向查询发送字符串时,它会像这样翻译{'$or':[{'name':'/^x/'},{'email':'/^x/'}},注意引号,这会导致problem@YCF_L我也尝试过类似于/^?0/的东西,但没有运气。你能展示一个有效的例子吗?即使这个例子会被翻译成引号。关键字变量应该像/^+关键字+/?因为它不起作用/您不想使用斜杠-它们是指定正则表达式的特殊语法。如果正则表达式是字符串,那么应该使用{$regex:^x,$options:i}语法。关键字变量应该像/^+关键字+/?因为它不起作用/您不想使用斜杠-它们是指定正则表达式的特殊语法。如果将正则表达式作为字符串,则应使用{$regex:^x,$options:i}语法。谢谢,我不知道/sign的用途。只要系统允许,我会尽快给你奖金!这怎么仍然是正则表达式搜索?@AsyaKamsky我的主要观点是将正则表达式作为字符串传递,而不使用/syntax,但您是正确的。我在问题中复制并粘贴了查询。更新答案。谢谢,我不知道/标志的用途。只要系统允许,我会尽快给你奖金!这怎么仍然是正则表达式搜索?@AsyaKamsky我的主要观点是将正则表达式作为字符串传递,而不使用/syntax,但您是正确的。我在问题中复制并粘贴了查询。更新答案。