Как запросить 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);
но это, похоже, не работает.
У кого-нибудь есть идеи?
Ответы
Ответ 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);
}
}