Доктрина MongoDB ODM искать в двух или более полях - PullRequest
11 голосов
/ 09 января 2012

Я хотел бы написать запрос в Doctrine Mongo ODM, который выполняет поиск по регулярному выражению в двух или более полях.В SQL это будет выглядеть так:

SELECT * FROM user WHERE name LIKE %search% OR surname LIKE %search%;

Я могу написать запрос для одного поля, например так:

$qb->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'));

, но я в растерянности, когда пытаюсь найти большеполя.

Спасибо за любую помощь

Ответы [ 2 ]

17 голосов
/ 10 января 2012

ну, на самом деле это довольно просто, я узнал через 5 минут после публикации этого вопроса

$qb->addOr($qb->expr()->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i')));
$qb->addOr($qb->expr()->field('name')->equals(new \MongoRegex('/.*'.$this->search.'.*/i')));
2 голосов
/ 09 января 2012

Вам необходимо использовать оператор $ или. Я не уверен, как это делается в доктрине, но вы ищете эквивалент этого в оболочке:

db.people.find({ $or: [{surname: /^regex1/}, {surname: /^regex2/}] })
...