Как запросить у mongodb «лайк», используя Java API? - PullRequest
30 голосов
/ 10 апреля 2011

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

Я в основном хочу использовать 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);

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

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

Ответы [ 6 ]

65 голосов
/ 10 апреля 2011

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

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

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

4 голосов
/ 10 сентября 2016

Чтобы сделать это без учета регистра:

Document doc = new Document("name", Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));
collection.find(doc);
3 голосов
/ 02 февраля 2016

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

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

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

например. использование ? в качестве параметра m вызовет исключение.

1 голос
/ 28 апреля 2015

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

Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);
0 голосов
/ 23 февраля 2017

Может не быть фактическим ответом, (Выполнение запроса терминала напрямую)

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 голосов
/ 26 августа 2016
Document doc = new Document("name", Pattern.compile(keyword));
collection.find(doc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...