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

Posted

技术标签:

【中文标题】Doctrine MongoDB ODM 在两个或多个字段中搜索【英文标题】:Doctrine MongoDB ODM search in two or more fields 【发布时间】: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'));

但是当我尝试搜索更多字段时,我不知所措。

感谢您的帮助

【问题讨论】:

【参考方案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/] )

【讨论】:

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

以上是关于Doctrine MongoDB ODM 在两个或多个字段中搜索的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine ODM with MongoDB 需要两个参考映射集

Doctrine MongoDB 在没有 ODM 的情况下使用

Doctrine MongoDB 在没有 ODM 的情况下使用

Doctrine ODM:如何选择Mongodb数据库

Doctrine ODM:如何选择Mongodb数据库

Doctrine 2 ODM MongoDB 从内存中将图像存储在 GridFS 中