2012-05-09 5 views
10

im Grunde ist meine Frage: How to query MongoDB with "like"?Abfragesyntax in mongodb für SQL „wie“ - ich bin mit Java

aber ich denke, alle Antworten in sind hier anwendbar, wenn Sie mongodb Shell-Befehlszeile verwenden, so was ist das Äquivalent für db.users.find({"name": /.*m.*/}), wenn wir Java verwenden.

hier ist, wie ich versuche,

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

Antwort

12

für dieses Problem zu tun, sollten Sie einen regulären Ausdruck wie in diesem Beispiel verwenden:

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. Du solltest schreiben: Pattern regex = Pattern.compile ("/.* m. * /"); wenn ich Titel finden möchte, die "m" enthalten? – MoienGK

+2

@dave Sie können einfach schreiben Muster regex = Pattern.compile ("m"); – sebastian

+0

+1 - beachten Sie, dass MongoDB wird "das Richtige tun" und führen Sie eine effiziente Suche mit einem Regex wenn möglich (im Grunde, wenn die Regex hat nur am Ende einen Platzhalter) –

0

das obige Beispiel nehmen als Referenz, aber unter Verwendung der Klasse Filter:

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