我想使用正则表达式查询,使文本搜索大小写不敏感,并使用 spring-data mongo
。
例如在 Oracle 中:
select * from user where lower(username) like '%ab%'
我该如何使用 spring-data mongo
实现这个查询呢?
提前感谢您的帮助。
我想使用正则表达式查询,使文本搜索大小写不敏感,并使用 spring-data mongo
。
例如在 Oracle 中:
select * from user where lower(username) like '%ab%'
我该如何使用 spring-data mongo
实现这个查询呢?
提前感谢您的帮助。
您可以尝试以下类似的代码。假设您有一个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);
}
使用带有查询 DSL 的 MongoRepository(区分大小写)
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);
我知道这是一个旧问题。我刚在另一篇帖子中找到了解决方案。 请使用以下$regex和$options:
@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);
@Repository
public interface CompetenceRepository extends MongoRepository<Competence, String> {
@Query("{ 'titre' : { '$regex' : ?0 , $options: 'i'}}")
List<Competence> findAllByTitreLikeMotcle(String motCle);
}
应该能够完美工作,我在我的项目中使用它,对于法语单词也有效。
是的,您可以这样做,前提是您已经正确设置了它,我建议在您的存储库方法中添加类似以下内容:
{'username': {$regex: /ab/i }})
@Query("{'username': {$regex: /?1/i }})")
List findUsersByUserName(String userName);
针对数字字段(int或double)的模糊查询
db.players.find({
$and: [{
"type": {
$in: ["football"]
}
},
{
$where : "/^250.*/.test(this.salary)"
}]
})
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/