2010-11-01 4 views

Antwort

14

Als ich das genaue Problem hatte, war ich durch Ignorieren Fall abfragen nicht in der Lage. Ich habe den Wert kopiert, den ich suchen wollte, um ihn zu normalisieren. In diesem Fall können Sie eine neue Eigenschaft erstellen und sie in Kleinbuchstaben umwandeln und einen Index dafür haben.

EDIT:

DBObject ref = new BasicDBObject(); 
ref.put("myfield", Pattern.compile(".*myValue.*" , Pattern.CASE_INSENSITIVE)); 
DBCursor cur = coll.find(ref); 

Ich frage mich, ob das funktioniert?

+0

Dies war Version 1.4 übrigens. Vielleicht haben sich die Dinge jetzt geändert. –

+1

Beim Spielen mit der Konsole wurde mir klar, dass die Eingabe von db.collection.find ({"prop":/value/i}) die Groß-/Kleinschreibung bei meiner Abfrage nicht berücksichtigt. Es muss eine Möglichkeit geben, das "i" -Attribut mit dem Java-Treiber zu aktivieren, selbst wenn es über eine Regex-Abfrage keine Rolle spielt. Die Eingabe von DBObject query = new BasicDBObject ("prop", "/" + value + "/ i") funktioniert jedoch nicht. – Mark

+0

Probieren Sie es aus. Ich hoffe es ist was du suchst. –

0
db.iolog.find({$where:"this.firstname.toLowerCase()==\"telMan\".toLowerCase()"}); 
DBObject ref = new BasicDBObject(); 
ref.append("firstname", new BasicDBObject("$where","this.firstname.toLowerCase()=="+firstname+".toLowerCase()")); 
-1
mapValue = new HashMap<String, Object>(); 
mapValue.put("$options", "i"); 
mapValue.put("$regex", "smth"); 
searchMap.put("name", mapValue); 
collection.find(new BasicDBObject(searchMap)); 
3

Im Fall, wenn Sie Frühlings-java unten erwähnt verwenden, ist so, wie Sie es in Groß- und Kleinschreibung suchen machen können.

public List<Discussion> searchQuestionByText(String qText){ 
     Query query = new Query(); 
     query.addCriteria(Criteria.where("discussionName").regex(qText,"i")); 
     return mongoTemplate.find(query, Discussion.class);  
    } 
0

Ich habe auch versucht, die beste Nutzung der Implementierung "case insensitive" zu bekommen. Wenn Sie die MongoDB Java driver 3.0 oder höher verwenden, sollten Sie diesen folgenden Code mit der $ Option Parameter verwenden! Es ist wirklich einfach zu bedienen:

Die Felder "Schlüssel" und "Wert" müssen mit Ihren eigenen Daten geändert werden.

(Ich rate Ihnen auch, mit $ Regex Parameter zu suchen, um Informationen über Teilabgleich in dem Fall, dass Sie mehr und mehr Datensätze in der Datenbank haben würde abrufen).