Php Doctrine MongoDB ODM在两个或多个字段中搜索

Php Doctrine MongoDB ODM在两个或多个字段中搜索,php,mongodb,doctrine-odm,odm,Php,Mongodb,Doctrine Odm,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')); 但是当我尝试在更多的领域中搜

我想在Doctrine Mongo ODM中编写一个查询,通过正则表达式在两个或多个字段中进行搜索。在SQL中,它看起来像:

SELECT * FROM user WHERE name LIKE %search% OR surname LIKE %search%;
我可以为一个字段编写如下查询:

$qb->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'));
但是当我尝试在更多的领域中搜索时,我会不知所措


感谢您的帮助

您需要使用$or运算符。我不确定这在理论中是如何做到的,但你正在寻找外壳中的等价物:

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

其实很简单,我在发帖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')));

另外,请注意,索引将仅用于区分大小写的根正则表达式。