【问题标题】:Doctrine MongoDB ODM search in two or more fieldsDoctrine MongoDB ODM 在两个或多个字段中搜索
【发布时间】:2012-02-06 03:43:39
【问题描述】:
我想在 Doctrine Mongo ODM 中编写一个查询,该查询通过正则表达式在两个或多个字段中进行搜索。在 SQL 中它看起来像:
SELECT * FROM user WHERE name LIKE %search% OR surname LIKE %search%;
我可以像这样为一个字段编写查询:
$qb->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'));
但是当我尝试搜索更多字段时,我不知所措。
感谢您的帮助
【问题讨论】:
标签:
php
mongodb
doctrine-odm
odm
【解决方案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】:
您需要使用 $or 运算符。我不确定这在教义中是如何完成的,但您正在外壳中寻找与此等效的内容:
db.people.find({ $or: [{surname: /^regex1/}, {surname: /^regex2/}] })