Spring 数据 mongo 像查询一样不区分大小写
Spring Data mongo case insensitive like query
我想通过 spring-data mongo
.
的正则表达式查询使文本搜索不区分大小写
例如在 Oracle 中:
select * from user where lower(username) like '%ab%'
如何使用 spring-data mongo
进行查询?
提前致谢
是的,你可以,只要你设置正确,我会在你的存储库方法中添加这样的东西:
{'username': {$regex: /ab/i }})
@Query("{'username': {$regex: /?1/i }})")
List findUsersByUserName(String userName);
您可以尝试如下操作。假设你有一个 User
pojo class.
使用 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);
}
对于基于 Non-Regex 的查询,您现在可以使用不区分大小写的 search/sort 通过将区域设置和强度设置为主要或次要的整理:
Query query = new Query(filter);
query.collation(Collation.of("en").
strength(Collation.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);
我知道这是一个老问题。我刚刚在另一个 post 中找到了解决方案。
使用 $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);
}
应该完美,它也适用于我的 projects.for 法语单词
对于数字字段(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/
在存储库模式中,我尝试了这个并成功了
@Query("{ 'username' : ?0 }.collation( { locale: 'en', strength: 2 } )")
用户 findByUserName(字符串名称);
我想通过 spring-data mongo
.
例如在 Oracle 中:
select * from user where lower(username) like '%ab%'
如何使用 spring-data mongo
进行查询?
提前致谢
是的,你可以,只要你设置正确,我会在你的存储库方法中添加这样的东西:
{'username': {$regex: /ab/i }})
@Query("{'username': {$regex: /?1/i }})")
List findUsersByUserName(String userName);
您可以尝试如下操作。假设你有一个 User
pojo class.
使用 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);
}
对于基于 Non-Regex 的查询,您现在可以使用不区分大小写的 search/sort 通过将区域设置和强度设置为主要或次要的整理:
Query query = new Query(filter);
query.collation(Collation.of("en").
strength(Collation.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);
我知道这是一个老问题。我刚刚在另一个 post 中找到了解决方案。 使用 $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);
}
应该完美,它也适用于我的 projects.for 法语单词
对于数字字段(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/
在存储库模式中,我尝试了这个并成功了
@Query("{ 'username' : ?0 }.collation( { locale: 'en', strength: 2 } )")
用户 findByUserName(字符串名称);