Подтвердить что ты не робот

Как запросить mongodb с помощью "like" с помощью java api?

этот вопрос очень похож на другой пост

В основном я хочу использовать версию mongodb для оператора sql "like" "% m%"

но в моей ситуации я использую java api для mongodb, в то время как другой пост использует оболочку mongodb

Я попробовал то, что было опубликовано в другом потоке, и он отлично работал

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

но в java я использую метод put в BasicDBObject и передаю его в метод find() объекта DBCollections

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

но это, похоже, не работает.

У кого-нибудь есть идеи?

4b9b3361

Ответ 1

Вам нужно передать экземпляр Java RegEx (java.util.regex.Pattern):

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

Это будет преобразовано в регулярное выражение MongoDB при отправке на сервер, а также любые флаги RegEx.

Ответ 2

Вы должны сначала указать свой текст, а затем использовать компиляцию, чтобы получить выражение регулярного выражения:

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

Без использования java.util.Pattern.quote() некоторые символы не экранируются.

например. используя ?, поскольку параметр m генерирует исключение.

Ответ 3

Чтобы сделать регистр нечувствительным:

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

Ответ 4

В spring данных mongodb это можно сделать как:

Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);

Ответ 5

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

Ответ 6

Не может быть фактический ответ, (непосредственно выполняющий запрос терминала)

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