2016-05-13 10 views
1

Ich habe diese drei Benutzer in meiner DB mit folgenden Tasten:MongoDB in Java Benutzern finden

Jon-111

Jon-222

Jon-333

Der Code I schrieb momentan kann nur ein Benutzer in der DB mit seinem Schlüssel finden. Wie kann ich all diese Benutzer zurückgeben?

public void getMongoDB() { 

    DB db = mongo.getDB("people"); 
    DBCollection table = db.getCollection("users"); 

    BasicDBObject searchQuery = new BasicDBObject(); 
    searchQuery.put("key", "Jon-111"); // what do I do here to return all the 'Jon' users? 

    DBCursor cursor = table.find(searchQuery); 

    int dbSize = cursor.size(); // size is 1 
    while (cursor.hasNext()) { 
     logger.debug(""+cursor.next()+"\n"); 
    }  
    logger.debug("users table"); 

} 

Vielen Dank im Voraus

+0

Es ist etwas entlang der Linien von '" Schlüssel sein würde "," LIKE jon - * ''. Allerdings habe ich noch nie MongoDb verwendet. Also kann es von MongoDb-Spezifika abhängen. – MikeT

+0

@MikeT das ist ein sehr standard SQL-Weg, es zu tun, aber mit Java/Mongo ist es etwas komplexer, rege erforderlich x, siehe meine Antwort unten für einige Beispiele. –

Antwort

1

Wenn Sie Ihre Suche wollen ‚mit Jon Startet‘ zu sein, versuchen Sie:

searchQuery.put("key", java.util.regex.Pattern.compile("^Jon")); 

Sie müssen Regex verwenden, um diese Art von Abfrage zu tun, wie in meinem Beispiel.

Einige weitere Beispiele zu Ihrem Vorteil:

'endet mit Jon':

searchQuery.put("key", java.util.regex.Pattern.compile("Jon$")); 

'Enthält Jon':

searchQuery.put("key", java.util.regex.Pattern.compile(".*Jon.*")); 
+0

danke hat super funktioniert! – user2456977

0

können Sie RegexMuster verwenden im Wert zu übergeben. So etwas wie unten:

searchQuery.put("key", java.util.regex.Pattern.compile("Jon-\\.*"));