Драйвер MongoDB и Java: «игнорировать регистр» в запросе - PullRequest
8 голосов
/ 01 ноября 2010

Это код, который я сейчас использую, как мне добавить атрибут «игнорировать регистр»?

DBObject query = new BasicDBObject("prop", value);

Спасибо

Ответы [ 5 ]

16 голосов
/ 01 ноября 2010

Когда у меня возникла точная проблема, я не смог выполнить запрос, игнорируя регистр.В итоге я скопировал значение, которое хотел найти, нормализуя его.В этом случае вы можете создать новое свойство и преобразовать его в нижний регистр и иметь индекс для этого.

РЕДАКТИРОВАТЬ:

DBObject ref = new BasicDBObject();
ref.put("myfield", Pattern.compile(".*myValue.*" , Pattern.CASE_INSENSITIVE));
DBCursor cur = coll.find(ref); 

Интересно, это работает?

5 голосов
/ 23 мая 2014

Если вы используете Spring-java, упомянутый ниже, вы можете выполнять поиск без учета регистра.

public List<Discussion> searchQuestionByText(String qText){
        Query query = new Query();
        query.addCriteria(Criteria.where("discussionName").regex(qText,"i"));
        return mongoTemplate.find(query, Discussion.class);     
    }
2 голосов
/ 12 октября 2015

Я также пытался наилучшим образом использовать реализацию "без учета регистра".Если вы используете драйвер MongoDB Java 3.0 или более поздней версии, используйте следующий код с параметром $ option !Это действительно легко использовать:

Document basicQuery = new Document();
basicQuery.append("key", new Document("$regex","value").append("$options","i")); 

Поля «ключ» и «значение» необходимо изменить с вашими собственными данными.Параметр $ regex для получения информации путем частичного сопоставления в случае, если в базе данных будет появляться все больше и больше записей.

0 голосов
/ 25 июля 2011
 mapValue = new HashMap<String, Object>();
 mapValue.put("$options", "i");
 mapValue.put("$regex", "smth");
 searchMap.put("name", mapValue);
 collection.find(new BasicDBObject(searchMap));
0 голосов
/ 21 июня 2011
db.iolog.find({$where:"this.firstname.toLowerCase()==\"telMan\".toLowerCase()"});
DBObject ref = new BasicDBObject();
ref.append("firstname", new BasicDBObject("$where","this.firstname.toLowerCase()=="+firstname+".toLowerCase()"));
...