2012-01-09 34 views
10

Tôi muốn viết một truy vấn trong Doctrine Mongo ODM rằng tìm kiếm theo regex trong hai hoặc nhiều trường. Trong SQL nó sẽ trông giống như:Doctrine MongoDB Tìm kiếm ODM trong hai hoặc nhiều trường

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

tôi có thể viết một truy vấn cho một lĩnh vực như thế này:

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

nhưng tôi đang ở một mất mát khi tôi cố gắng tìm kiếm trong nhiều lĩnh vực.

Cảm ơn bạn đã giúp đỡ

Trả lời

17

cũng thực sự nó là khá đơn giản, tôi phát hiện ra 5 phút sau khi đăng câu hỏi này

$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

Bạn cần sử dụng toán tử $ hoặc toán tử. Tôi không chắc chắn cách này được thực hiện trong học thuyết nhưng bạn đang tìm kiếm tương đương này trong vỏ:

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

Ngoài ra, hãy lưu ý rằng chỉ mục sẽ chỉ được sử dụng cho cụm từ thông dụng nhạy cảm bắt nguồn từ trường hợp gốc. –

Các vấn đề liên quan