Как я могу использовать регулярные выражения с Doctrine Mongodb ODM?
Я пытаюсь использовать регулярные выражения для запроса Mongodb с использованием Doctrine Mongodb ODM на Symfony 2.
Я знаю, что PHP mongo может сделать это. Однако я не знаю, как это сделать с помощью Doctrine.
Использовать ли я один класс? Как я могу ссылаться на MongoRegex из Symfony?
Ответы
Ответ 1
Это появилось некоторое время назад в doctrine-user рассылке. Класс \MongoRegex
можно использовать непосредственно в запросах ODM:
$documentRepository->findBy(array(
'foo' => new \MongoRegex('/^bar/'),
));
Или если используется построитель запросов:
$queryBuilder->field('foo')->equals(new \MongoRegex('/^bar/'));
Имейте в виду, что шаблоны регулярных выражений с привязкой к фронту, наиболее чувствительные к регистру, смогут наиболее эффективно использовать индексы. Это более подробно обсуждается в Mongo docs.
Ответ 2
вы можете следить за вопросом о переполнении стека для подробностей
Как использовать зарезервированные символы в createQueryBuilder и MongoRegix,
Кроме того, в то время как /^ a/,/^a./и/^a.$/соответствуют эквивалентным строкам, они имеют разные характеристики производительности. Все эти выражения используют индекс, если существует соответствующий индекс; однако,/^a./и/^a.$/медленнее./^ a/может остановить сканирование после сопоставления префикса.
Mongo Docs Regix