2010-11-01 14 views

risposta

14

Quando ho avuto il problema esatto, non ero in grado di interrogare ignorando caso. Ho finito per copiare il valore che volevo cercare normalizzandolo. In questo caso, puoi creare una nuova proprietà e convertirla in minuscolo e avere un indice su quello.

EDIT:

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

Mi chiedo se funziona?

+0

Questa era la versione 1.4. Forse le cose ora sono cambiate. –

+1

Giocando con la console, mi sono reso conto che digitando db.collection.find ({"prop":/value/i}) la mia query non è stata minimizzata. Ci deve essere un modo per abilitare l'attributo "i" usando il driver Java, anche se attraverso una query Regex non ha importanza. Digitando DBObject query = new BasicDBObject ("prop", "/" + value + "/ i") non funziona comunque. – Mark

+0

Provalo. Spero sia quello che stai cercando. –

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

Nel caso in cui se si utilizza Primavera-java di seguito menzionato è il modo in cui si può fare la ricerca in maniera case-insensitive.

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

Stavo anche cercando di sfruttare al meglio l'implementazione "case insensitive". Se stai utilizzando lo MongoDB Java driver 3.0 o successivo, dovresti usare questo codice seguente, con il parametro $ $! È davvero facile da usare:

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

I campi "chiave" e "valore" devono essere modificati con i propri dati.

(Si consiglia inoltre di effettuare una ricerca con il parametro $ regex per recuperare informazioni tramite corrispondenza parziale nel caso si abbiano più record nel database).

Problemi correlati