2012-01-09 45 views
10

我想在Doctrine Mongo ODM中編寫一個查詢,它通過正則表達式在兩個或多個字段中進行搜索。在SQL它會是什麼樣子:Doctrine MongoDB ODM在兩個或多個字段中搜索

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

我可以寫一個查詢,像這樣一個領域:

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

但我不知所措我當我嘗試在更多的領域進行搜索。

感謝您的任何幫助

回答

17

以及實際上它很簡單,我發佈了這個問題

後發現,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'))); 
1

您需要使用$或操作符。我不知道這是如何在教義做到,但你正在尋找這在外殼的等價物:

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

另外,請注意索引只能用於根區分大小寫的正則表達式。 – 2012-01-09 19:27:03