2012-05-09 7 views
10

in fondo questa è la mia domanda: How to query MongoDB with "like"?Sintassi di query in MongoDB per SQL "come" - sto usando java

ma immagino tutte le risposte qui sono applicabili quando si utilizza MongoDB riga di comando di shell, così che cosa è l'equivalente per db.users.find({"name": /.*m.*/}) quando si utilizza java.

ecco come lo sto cercando di fare

DBCollection coll = MongoDBUtil.getDB().getCollection("post_details");  
    BasicDBObject query = new BasicDBObject();  
    query.put("price", new BasicDBObject("$gt", 5).append("$lt", 8)); 
/*what should i write instead of this line*/ 
      query.put("title", "/.*m.*/"); 

    DBCursor cur = coll.find(query); 

risposta

12

Per questo problema si dovrebbe usare una regex come in questo esempio:

BasicDBObject query = new BasicDBObject(); 
Pattern regex = Pattern.compile("the title you are looking for"); // should be m in your case 
query.put("title", regex); 
+0

thnx. Voglio dire che dovrei scrivere: Pattern regex = Pattern.compile ("/.* m. * /"); se voglio trovare i titoli che contengono "m"? – MoienGK

+2

@dave puoi semplicemente scrivere Pattern regex = Pattern.compile ("m"); – sebastian

+0

+1 - nota che MongoDB "farà la cosa giusta" ed eseguirà una ricerca efficiente con una regex se possibile (in pratica quando la regex ha un carattere jolly solo alla fine) –

0

Prendendo l'esempio di cui sopra come riferimento, ma utilizzando la classe Filters:

Pattern regex = Pattern.compile("title you look for"); 
Bson filter = Filters.eq("nombre", regex));