2016-07-25 5 views
0

Я пытаюсь выполнить следующий запрос из кода Java:

{ "Post Text" : { "$not" : /.*golf.*/i}} 

мой Java-код:

BasicDBObject not = new BasicDBObject(); 
not.append("$not", "/.*golf.*/i"); 

BasicDBObject query = new BasicDBObject(); 
query.put("Post Text", not); 

Когда я бегу выше запроса, получить этот журнал:

Курсор ID = 0, нс = journaldev.Rotunda, запрос = { "Текст сообщения": { "$ не": "./гольф/я"}}, numIterat ed = 0, readPreference = primary

дополнительные кавычки вокруг регулярного выражения создают проблему. Может ли кто-нибудь помочь мне в исправлении этого?

+0

Какая версия для дайвера? – mtj

+0

Использование версии mongo: 2.12.3 –

+0

Извините, никакой помощи от меня тогда ... только делать 3.x – mtj

ответ

0

Используя 3.x, вы можете использовать класс утилиты Filters для создания различных запросов для вас. В вашем случае, вам нужна следующая конструкция:

Bson myFilter = Filters.not(
    Filters.eq("Post Text", 
     Pattern.compile(".*golf.*", Pattern.CASE_INSENSITIVE))); 

Использование драйвера 3.x выполнить такой запрос вдоль линий:

MongoClient mongoClient = new MongoClient(); 
MongoCollection<Document> coll = mongoClient.getDatabase("test").getCollection("mycoll"); 
coll.find(myFilter); // do something with the FindIterable returned here 
0

Вы можете попробовать что-то вроде этого

Pattern textRegex = Pattern.compile(".*golf.*", Pattern.CASE_INSENSITIVE); 
BasicDBObject not = new BasicDBObject("$not", textRegex); 
BasicDBObject query = new BasicDBObject("Post Text", not); 

Когда вы передаете образец, драйвер mongo автоматически заботится о том, чтобы сделать его регулярным выражением. Если вы отлаживаете и видите код, он будет работать с "$regex".

Надеюсь, что это решает проблему

+0

@Yoyo: Вышеупомянутое решение работает для вас? – Nattyk

Смежные вопросы