2010-11-01 12 views

Odpowiedz

14

Gdy miałem dokładnie problem, że nie był w stanie do kwerendy, pomijając sprawę. Skończyłem kopiować wartość, którą chciałem przeszukać, normalizując ją. W takim przypadku możesz utworzyć nową właściwość i przekonwertować ją na małe litery i utworzyć na niej indeks.

EDIT:

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

Zastanawiam się, czy to działa?

+0

To była wersja 1.4 przy okazji. Może rzeczy się teraz zmieniły. –

+1

Grając z konsolą, zdałem sobie sprawę, że wpisanie db.collection.find ({"prop":/value/i}) powoduje, że moje zapytanie jest niewrażliwe. Musi istnieć sposób włączenia atrybutu "i" przy użyciu sterownika Java, nawet jeśli za pośrednictwem zapytania Regex nie ma znaczenia. Wpisywanie zapytania DBObject = new BasicDBObject ("prop", "/" + value + "/ i") nie działa jednak. – Mark

+0

Spróbuj. Mam nadzieję, że to, czego szukasz. –

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

W przypadku jeśli używasz wiosna-java poniżej wymienionych jest sposób można je wyszukać w przypadku niewrażliwe sposób.

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

Byłem też staramy się jak najlepiej wykorzystać realizacji „case niewrażliwy”. Jeśli używasz MongoDB Java driver 3.0 lub nowszego, powinieneś użyć następującego kodu z parametrem $ opcja! Jest bardzo łatwy w użyciu:

Document basicQuery = new Document(); 
basicQuery.append("key", new Document("$regex","value").append("$options","i")); 

Pola "klucz" i "wartość" należy zmienić przy użyciu własnych danych.

(Zaleca się również wyszukiwanie przy użyciu parametru $ regex w celu pobrania informacji poprzez częściowe dopasowanie w przypadku, gdyby w bazie danych było więcej rekordów).

Powiązane problemy