2015-07-23 4 views
1

У меня есть большой MongoDB и хотите, чтобы получить все записи, где «FullName» поле обязательно отвечает этим требованиямDoctrine/MongoDB регулярное выражение

должны содержать «ас» или «а/с» или «ABC» не должен содержать «королева»

$data = $repository 
      ->createQueryBuilder('AppBundle:Data') 
      ->field('fullname')->equals(new \MongoRegex('/(ab?/?c$)/i')) 
      ->hydrate(false) 
      ->immortal(true) 
      ->getQuery() 
      ->execute(); 

Сейчас я использую его, как и выше, и это работает, и есть это исключить «королеву».

foreach ($data as $row) { 
    if (!stristr($row['fullname']), 'queen')) { 
     // do stuff 
    } 
} 

Но я бы хотел, чтобы Mongo обработал его для меня.

ответ

3

Если Монго поддерживать отрицательный предпросмотр, то вы можете использовать это,

^(?!.*queen).*a[b\/]?c 

Вы можете использовать выше регулярное выражение для проверки состояния, который находит совпадение только если строка не будет conatin queen подстроку и строка должна содержат подстроку ab или abc или a/c

+0

Mongo regexes являются «pcre». Полагаю, что технически из boost. Так да. –

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