我希望使用Controller
的正则表达式查询使文本搜索不区分大小写。
例如在Oracle中:
spring-data mongo
如何使用 select * from user where lower(username) like '%ab%'
进行此查询?
提前致谢
答案 0 :(得分:11)
您可以尝试以下内容。假设你有一个User
pojo类。
使用MongoTemplate
i
选项不区分大小写。
Criteria regex = Criteria.where("username").regex("*.ab.*", "i");
mongoOperations.find(new Query().addCriteria(regex), User.class);
使用MongoRepository(区分大小写)
List<User> users = userRepository.findByUserNameRegex(".*ab.*");
interface UserRepository extends MongoRepository<User, String> {
List<User> findByUserNameRegex(String userName);
}
将MongoRepository与查询dsl一起使用(区分大小写)
List<User> users = userRepository.findByQuery(".*ab.*");
interface UserRepository extends MongoRepository<User, String> {
@Query("{'username': {$regex: ?0 }})")
List<User> findByQuery(String userName);
}
对于基于非正则表达式的查询,您现在可以使用不区分大小写的搜索/排序,并将区域设置和强度设置为主要或次要。
Query query = new Query(filter);
query.collation(Collation.of("en").
strength(Collation.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);
答案 1 :(得分:8)
我知道这是一个老问题。我刚在另一篇文章中找到了解决方案。 使用$ regex和$ options如下:
@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);
看到原来的答案: https://stackoverflow.com/a/19068401
答案 2 :(得分:3)
@Repository
public interface CompetenceRepository extends MongoRepository<Competence, String> {
@Query("{ 'titre' : { '$regex' : ?0 , $options: 'i'}}")
List<Competence> findAllByTitreLikeMotcle(String motCle);
}
应该完美无缺,它适用于我的项目。也适用于法语单词
答案 3 :(得分:0)
是的,你可以,只要你设置正确,我会在你的存储库方法中添加这样的东西:
{&#39;用户名&#39;:{$ regex:/ ab / i}})
@Query(&#34; {&#39;用户名&#39;:{$ regex:/?1 / i}})&#34;)
列出findUsersByUserName(String userName);
答案 4 :(得分:0)
对于数字字段(整数或双精度)的类似查询
db.players.find({
$and: [{
"type": {
$in: ["football"]
}
},
{
$where : "/^250.*/.test(this.salary)"
}]
})
查看详细代码:Spring Boot mongodb like query on int/double using mongotemplate
答案 5 :(得分:0)
String tagName = "apple";
Query query = new Query();
query.limit(10);
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);
参考-https://mkyong.com/mongodb/spring-data-mongodb-like-query-example/
答案 6 :(得分:0)
在存储库模式中,我尝试了此方法并工作了
@Query(“ {'username':?0} .collation({locale:'en',strength:2})”)
User findByUserName(String name);