Ho un problema molto fastidioso con una query maiuscole/minuscole su mongodb.query MongoDB non sensibile al maiuscolo/minuscolo sul testo con parentesi
Sto utilizzando MongoTemplate in un'applicazione Web e ho bisogno di eseguire query maiuscole e minuscole su una raccolta.
con questo codice
Query q = new Query();
q.addCriteria(Criteria.where("myField")
.regex(Pattern.compile(fieldValue, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)));
return mongoTemplate.findOne(q,MyClass.class);
ho creare la seguente query
{ "myField" : { "$regex" : "field value" , "$options" : "iu"}}
che funziona perfettamente quando ho di testo semplice, ad esempio:
Capitella capitata
ma ... ma ... quando t ecco la parentesi () la query non funziona. Non funziona affatto, anche il testo della query è scritto, come è scritto nel documento ... Esempio:
interrogazione 1:
{"myField" : "Ceratonereis (Composetia) costae" } -> 1 result (ok)
interrogazione 2:
{ "myField" : {
"$regex" : "Ceratonereis (Composetia) costae" ,
"$options" : "iu"
}} -> no results (not ok)
query 3:
{ "scientificName" : {
"$regex" : "ceratonereis (composetia) costae" ,
"$options" : "iu"
}} -> no results (....)
Quindi ... sto facendo qualcosa di sbagliato? Ho dimenticato alcuni Pattern. Alcuni da includere nel Pattern.compile()? Qualche soluzione?
Grazie
------ ------ UPDATE
La risposta di user3561036 mi ha aiutato a capire come la query deve essere costruito.
Così, ho risolto modificando la costruzione di query nella query
q.addCriteria(Criteria.where("myField")
.regex(Pattern.compile(Pattern.quote(myFieldValue), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)));
L'uscita
{ "myField" : { "$regex" : "\\Qhaliclona (rhizoniera) sarai\\E" , "$options" : "iu"}}
opere.
perché hai usato 'u' (" $ opzioni ":" iu ") nelle opzioni? – Vishnu