Ich habe ein sehr lästiges Problem mit einer Groß-und Kleinschreibung Abfrage auf Mongodb.MongoDB case insensitive Abfrage von Text mit Klammern
Ich verwende MongoTemplate in einer Webanwendung und ich muss case-insensitive Abfragen für eine Auflistung ausführen.
mit diesem Code
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);
ich die folgende Abfrage
{ "myField" : { "$regex" : "field value" , "$options" : "iu"}}
schaffen, die perfekt funktioniert, wenn ich einfach Text, zum Beispiel:
Capitella capitata
aber ... aber ... wenn t Hier sind Klammer() die Abfrage funktioniert nicht. Es ist überhaupt nicht arbeiten, auch die Abfrage Text geschrieben ist in dem Dokument ... Beispiel geschrieben wird:
Abfrage 1:
{"myField" : "Ceratonereis (Composetia) costae" } -> 1 result (ok)
Abfrage 2:
{ "myField" : {
"$regex" : "Ceratonereis (Composetia) costae" ,
"$options" : "iu"
}} -> no results (not ok)
Abfrage 3:
{ "scientificName" : {
"$regex" : "ceratonereis (composetia) costae" ,
"$options" : "iu"
}} -> no results (....)
Also ... mache ich etwas falsch? Ich habe vergessen, einige Pattern.SOME in die Pattern.compile() aufzunehmen? Irgendeine Lösungsmöglichkeit?
Dank
------ ------ UPDATE
Die Antwort von user3561036 mir Figur geholfen, wie die Abfrage erstellt werden muss.
So habe ich durch Modifizieren der Erstellung von Abfragen in
aufgelöstq.addCriteria(Criteria.where("myField")
.regex(Pattern.compile(Pattern.quote(myFieldValue), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)));
Der Ausgang Abfrage
{ "myField" : { "$regex" : "\\Qhaliclona (rhizoniera) sarai\\E" , "$options" : "iu"}}
funktioniert.
Warum haben Sie 'u' (" $ options ":" iu ") in Optionen verwendet? – Vishnu