【问题标题】: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/}] })
      

      【讨论】:

      • 另外,请注意索引只会用于区分大小写的正则表达式。
      猜你喜欢
      • 2014-04-19
      • 2016-06-26
      • 2012-04-12
      • 1970-01-01
      • 2022-01-25
      • 2013-03-07
      • 1970-01-01
      • 2012-07-03
      • 2013-03-21
      相关资源
      最近更新 更多