Doctrine MongoDB ODM поиск в двух или более полях

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

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

Я могу написать запрос для одного поля следующим образом:

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

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

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

Ответ 1

ну на самом деле это довольно просто, я узнал через 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

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

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