web-dev-qa-db-fra.com

Comment interroger mongodb avec “like” en utilisant l'API Java?

cette question est très semblable à une autre post

Je souhaite utiliser la version mongodb de l'opérateur sql "like" '% m%'

mais dans ma situation, j'utilise l'api Java pour mongodb, tandis que l'autre post utilise mongodb Shell

j'ai essayé ce qui a été posté dans l'autre fil et cela a bien fonctionné 

db.users.find({"name": /m/})

mais en Java, j'utilise la méthode put sur le BasicDBObject et le passe dans la méthode find () sur un objet DBCollections

BasicDBObject q = new BasicDBOBject();
q.put("name", "/"+m+"/");
dbc.find(q);

mais cela ne semble pas fonctionner. 

quelqu'un a des idées?

30
Khon

Vous devez passer une instance d'un Java RegEx ( Java.util.regex.Pattern ):

BasicDBObject q = new BasicDBObject();
q.put("name",  Java.util.regex.Pattern.compile(m));
dbc.find(q);

Cela sera converti en une regex MongoDB lorsqu’il sera envoyé au serveur, ainsi que tous les drapeaux RegEx. 

64

Vous devez d’abord citer votre texte, puis utiliser la compilation pour obtenir une expression regex:

q.put("name",  Pattern.compile(Pattern.quote(m)));

Sans utiliser Java.util.Pattern.quote() certains caractères ne sont pas échappés. 

par exemple. utiliser ? comme paramètre m lève une exception.

3
Nayish

Pour le rendre insensible à la casse:

Document doc = new Document("name", Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));
collection.find(doc);
3
Andres

Dans les données de printemps mongodb, cela peut être fait comme suit:

Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);
1
Vaibhav
Document doc = new Document("name", Pattern.compile(keyword));
collection.find(doc);
0
evan.wang

Peut-être pas la réponse réelle, (Exécuter directement la requête du terminal)

public void displayDetails() {
    try {
        // DB db = roleDao.returnDB();
        MongoClient mongoClient = new MongoClient("localhost", 5000);
        DB db = mongoClient.getDB("test");
        db.eval("db.test.update({'id':{'$not':{'$in':[/su/]}}},{$set:{'test':'test3'}},true,true)", new Object[] {});
        System.out.println("inserted  ");

    } catch (Exception e) {
        System.out.println(e);
    }
}
0
M. Gopal