Je souhaite rendre la recherche de texte insensible à la casse avec la requête regex avec spring-data mongo
.
Par exemple dans Oracle:
select * from user where lower(username) like '%ab%'
Comment puis-je faire cette requête avec spring-data mongo
?
Merci d'avance
Vous pouvez essayer quelque chose comme ci-dessous. Suppose que vous avez une classe User
pojo.
Utiliser MongoTemplate
i
option pour les majuscules et les minuscules.
Criteria regex = Criteria.where("username").regex("*.ab.*", "i");
mongoOperations.find(new Query().addCriteria(regex), User.class);
Utilisation de MongoRepository (sensible à la casse)
List<User> users = userRepository.findByUserNameRegex(".*ab.*");
interface UserRepository extends MongoRepository<User, String> {
List<User> findByUserNameRegex(String userName);
}
Utilisation de MongoRepository avec Query dsl (sensible à la casse)
List<User> users = userRepository.findByQuery(".*ab.*");
interface UserRepository extends MongoRepository<User, String> {
@Query("{'username': {$regex: ?0 }})")
List<User> findByQuery(String userName);
}
Pour les requêtes non basées sur Regex, vous pouvez désormais utiliser la recherche/tri sans distinction de casse par le classement avec les paramètres régionaux et la force définis sur primaire ou secondaire.
Query query = new Query(filter);
query.collation(Collation.of("en").
strength(Collation.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);
Je sais que c'est une vieille question. Je viens de trouver la solution dans un autre article . Utilisez $ regex et $ options comme ci-dessous:
@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);
voir la réponse d'origine: https://stackoverflow.com/a/19068401
@Repository
public interface CompetenceRepository extends MongoRepository<Competence, String> {
@Query("{ 'titre' : { '$regex' : ?0 , $options: 'i'}}")
List<Competence> findAllByTitreLikeMotcle(String motCle);
}
Devrait fonctionner parfaitement, cela fonctionne dans mes projets.pour les mots en français aussi
Oui, vous pouvez, si vous l'avez configuré correctement, j'ajouterais quelque chose comme ceci dans votre méthode de référentiel:
{'nom d'utilisateur': {$ regex:/ab/i}})
@Query ("{'username': {$ regex: /? 1/i}})")
Liste findUsersByUserName (String userName);