2012-05-09 9 views
10

zasadzie to jest moje pytanie: How to query MongoDB with "like"?Składnia zapytania w MongoDB dla SQL „jak” - używam java

ale chyba wszystkie odpowiedzi tutaj są stosowane, gdy używasz linii poleceń powłoki MongoDB, więc co jest odpowiednikiem dla db.users.find({"name": /.*m.*/}), gdy używamy języka Java.

tutaj jest jak próbuję zrobić

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); 

Odpowiedz

12

Dla tego problemu należy użyć wyrażenia regularnego, jak w poniższym przykładzie:

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. Powinieneś napisać: Pattern regex = Pattern.compile ("/.* m. * /"); jeśli chcę znaleźć tytuły zawierające "m"? – MoienGK

+2

@dodaj możesz po prostu napisać Wzór regex = Pattern.compile ("m"); – sebastian

+0

+1 - zauważ, że MongoDB "zrobi to, co trzeba" i przeprowadzi efektywne wyszukiwanie z wyrażeniem regularnym, jeśli to możliwe (w zasadzie, gdy wyrażenie to ma tylko symbol wieloznaczny na końcu) –

0

Biorąc powyższy przykład jako odniesienie, ale używając klasy Filtry:

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